Ruby-on-Rails:根据先前的选择填充选择框

时间:2011-08-23 01:01:54

标签: ruby-on-rails ruby prototype

我有一组3个collection_selects,我想过滤下一个选择。在第一个选择框中选择一个项目时,它应该限制第二个和第三个选择框的可能值。

类似的数据模型如下......

表格和字段

  • 锁定
    • lock_id
    • brand_id
    • master_id
    • regular_id
  • 锁定品牌
    • brand_id
  • 万能钥匙
    • master_id
    • brand_id
  • 常规密钥
    • regular_id
    • brand_id

因此,在填写添加新锁的表单时,会有针对品牌,主人和常规的选择框。选择品牌后,它会将主键和常规键限制为仅属于所选品牌的键。

我发现了一些如何做到这一点的部分例子,但没有一个是完整的。我很欣赏如何实现这一点的完整示例。

1 个答案:

答案 0 :(得分:3)

您需要做的就是使用事件监听器绑定选择,该事件监听器触发填充包含后续选择的其他2个部分的ajax请求。即。

<%= form_for @thing, :remote => true do, :update => 'second_form' |f| %>
  <%= hidden_field_tag 'form_partial', :value => 'form_2' %> 
  <%= select_tag :some_param, [[a,a],[b,b],[c,c]] :class => 'submittable' %> 
  <%= f.label :checked %>
  <%= thing.name %>
<% end %>
<div id='second_form'>
</div>
<div id='third_form'>
</div>

class ThingController < ApplicationController
  def update
    checkboxes = some_logic_to_select_checkboxes from params[:some_params]
    render :partial => params[:form_partial], :locals => {:select_menu => select_menu}
  end
end

$('.submittable').live('change', function() {
  $(this).parents('form:first').submit();
  return false;
});

您的表单部分应包含填充了您要启用的任何选项的表单。只要重复表格,思考是多余的。