当前位置: 首页 > 面试题库 >

Rails 4:如何通过AJAX基于另一个collection_select更新一个collection_select?

何峰
2023-03-14
问题内容

问题: 我需要根据 组织 集合的选择来过滤 单位 集合

选择 组织后*单位 下拉菜单应刷新以仅显示属于已知 组织单位*

这些文档:

  • http://guides.rubyonrails.org/form_helpers.html
  • http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html
  • http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-options_from_collection_for_select

到目前为止,这是我的代码:

楷模

class Organization < ActiveRecord::Base
  has_many :units
  has_many :projects, through: :units
end
class Unit < ActiveRecord::Base
  belongs_to :organization
  has_many :projects
end
class Project < ActiveRecord::Base
  belongs_to :organizaton
  has_one :organization, through: :unit
end

查看 app / views / projects / _form.html.erb

<%= form_for(@project) do |f| %>

  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :description %><br>
    <%= f.text_area :description %>
  </div>
  <div class="field">
    <%= f.label :organization_id %><br>
    <%= f.collection_select :organization_id, Organization.all, :id, :name %>
  </div>
  <div class="field">
    <%= f.label :unit_id %><br>
    <%= f.collection_select :unit_id, Unit.all.where(organization_id: :organization_id), :id, :name %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

控制器 项目控制器

def new
  @project = Project.new
end

def project_params
  params.require(:project).permit(:name, :description, :organization_id, :unit_id)
end

我该如何工作?


问题答案:

我做到了,解决方案非常简单,但是由于缺少有关此简单问题的更新资料,因此使它比原本应做的事情繁琐得多:

config / routes.rb

 get 'filter_units_by_organization' => 'projects#filter_units_by_organization'

controllers / projects_controller.rb

def filter_units_by_organization
  @filtered_units = Unit.where(organization_id: params[:selected_organization])
end

视图/项目/filter_units_by_organization.js.erb

$('select#project_unit_id').html('<%= j options_from_collection_for_select(@filtered_units, :id, :name) %>');

资产/javascripts/application.js

$(function() {
    $("select#project_organization_id").on("change", function() {
        $.ajax({
            url:  "/filter_units_by_organization",
            type: "GET",
            data: { selected_organization: $("select#project_organization_id").val() }
        });
    });
});

views / projects / _form.html.erb

<div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :description %><br>
    <%= f.text_area :description %>
  </div>
  <div class="field">
    <%= f.label :organization_id %><br>
    <%= f.collection_select :organization_id, Organization.all, :id, :name, { prompt: 'Please select' } %>
  </div>
  <div class="field">
    <%= f.label :unit_id %><br>
    <%= f.collection_select :unit_id, Unit.all.where(organization_id: :organization_id), :id, :name %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>


 类似资料:
  • 问题内容: 我有两个桌子, 这是我的第一张桌子, 这是我的第二张桌子 我需要一些如何使用第一个表中的数据更新第二个表中的所有行的信息。 它需要在一个更新查询中完成所有这些操作。 SUBST_ID和SERIAL_ID都匹配,它需要从第一个表中获取created_id并将其插入第二个表中。 因此,第二张表将变为以下内容, 感谢您的帮助和指导。 问题答案:

  • 给定: 表A~400k行表B~150k行 两个表都有相同的GUID,但我需要在A中标记B中所有缺少的GUID,这两个GUID都有索引。 查询: 这个查询可以工作,但在我的机器上花了4、5个小时。有什么方法可以让这个查询运行得更快吗?

  • 我正在使用齐柏林飞艇0.6.2和火花2.0。 我尝试在循环中执行查询,但效果不是很好。 我需要循环一个数据帧的每一行,大约5000行,并执行一个查询,这将在另一个数据帧中增加一个值。 以下是我的尝试: 我试着从两个数据帧中提取一小部分,但仍然很慢。我觉得我做得不对。 知道如何快速更新数据帧吗?

  • 问题内容: 我在Java中的线程上有些挣扎,我有三个线程- 线程1,线程2和线程3。那些启动时正在执行某些任务,我想通过thread1停止这两个线程。我将thread1放在,然后停止两个线程,但是两个线程的进程仍在运行。你有什么想法吗? 问题答案: 您如何试图阻止他们??警告此方法已弃用。 而是考虑对线程1使用某种标志来与线程2和3通信,它们应该停止。实际上,您可能会使用interrupts。 下

  • 我必须在我的android活动中实现2个回收器视图,其中第一个回收器视图显示类别,第二个将显示来自所选类别的项目。我已经实现了第一个回收器视图。 现在,在RecycerView中单击一个项目时,我需要突出显示该视图,还需要显示该类别下的项目。当我单击另一个视图时,第一个视图高亮应该更改为单击并显示该类别中的项目的新视图。另外,当我谈到这个活动时,第一个项目应该在第一个回收器视图中默认突出显示,相应

  • 我在另一个表(如ac)中有大约88k条记录。我想将表ac的一列更新到主表(如tbl)中。Eg-Table tbl示例记录,如 col1 col2 col3 col4 表ac中的样本记录如下 col1 col3` 如何从ac表更新tbl值。使记录看起来像 col1 col2 col3 col4