【发布时间】:2014-10-21 10:19:07
【问题描述】:
我有一个跟踪呼叫的 Rails 3.2.14 应用程序,每个呼叫都有一个来自 Facility 模型的接送设施,这是一个关联。
在呼叫模型中,区域模型(即休斯顿、达拉斯、奥斯汀等)有一个关联,我们根据呼叫的来源选择一个区域。
我想做的是能够选择一个特定的地区(即休斯顿),并在取货设施集合中只显示休斯顿地区的设施。
我假设一开始我需要在 Facility 和 Region 之间建立这样的关系:
facility.rb
attr_accessible :region_id
belongs_to :region
region.rb
has_many :facilities
然后我需要为每个设施设置一个与相应区域(即休斯顿、达拉斯等)匹配的 region_id,以便关联正常工作。
我不确定如何选择特定区域,并且仅在表单中显示该区域中的设施。我假设我会在这里使用一些 jQuery/JS/Ajax 来实现它,但不知道如何让它工作。
以下是我目前的呼叫、设施和区域模型的摘录:
call.rb
belongs_to :transferred_from, :foreign_key => :transfer_from_id, :class_name => 'Facility'
belongs_to :transferred_to, :foreign_key => :transfer_to_id, :class_name => 'Facility'
belongs_to :region
facility.rb
has_many :calls_transferred_from, :foreign_key => :transfer_from_id, :class_name => 'Call'
has_many :calls_transferred_to, :foreign_key => :transfer_to_id, :class_name => 'Call'
region.rb
has_many :calls
这是我的调用表单部分的摘录:
_form.html.erb
<%= form_for(@call) do |f| %>
<%= f.label :region %>
<%= f.collection_select(:region_id, Region.all, :id, :area, {:include_blank => true}, {:class => 'select', required: true}) %>
<%= f.label :Transfer_From %>
<%= f.collection_select(:transfer_from_id, Facility.active.order("facility_name ASC"), :id, :facility_name, {:include_blank => true}, {:class => 'select'}) %>
<%= f.button "Submit", class: 'btn btn-info btn-large', data: {disable_with: "<i class='icon-spinner'></i>Processing..."} %>
<% end %>
如果其中任何内容令人困惑或需要澄清,请告诉我。总而言之,我正在尝试选择一个地区(休斯顿),并仅在选择该地区时在表单中显示休斯顿地区的设施。
提前感谢您提供的任何帮助或提示。
【问题讨论】:
-
我认为Railscast:Dynamic Select Menus 可能是朝着正确方向迈出的一步,但我不确定我是否会使用 grouped_collection_select。
-
我已经设置了 Region 和 Facility 之间的关联,并且该部分工作正常,现在只需要找出一些 jQuery/CoffeeScript 来实现这一点,以及在我的表单中使用什么方法来选择。 grouped_collection_select 似乎没有做我需要的事情。
标签: jquery ruby-on-rails-3 forms activerecord collections