【问题标题】:Rails dependent collection_select fields in form表单中依赖 Rails 的 collection_select 字段
【发布时间】:2011-03-15 11:51:26
【问题描述】:

我正在开发一个 Rails 应用程序,但找不到如何处理相关下拉列表。 我有 3 个模型: - 有几个组的类别 - 有几个成员的组 - 会员

选择一个类别后,我希望该类别中的组填充第二个下拉列表(组和成员之间也是如此)。

我有以下表格(显然这不是我想要的,因为我拿了特定型号的所有物品)...

<div class="field">
<%= f.collection_select(:category, Category.find(:all), :id, :name, {:include_blank => 'Category'}) %>
</div>
<div class="field">
<%= f.collection_select(:group, Group.find(:all), :id, :name, {:include_blank => 'Group'}) %>
</div>
<div class="field">
<%= f.collection_select(:member, Member.find(:all), :id, :name, {:include_blank => 'Member'}) %>
</div>
<div class="actions">
<%= f.submit %>
</div>

使这些字段依赖的最佳方法是什么?我在网上找到了几个与此相关的主题,但无法真正找到答案。

【问题讨论】:

    标签: ruby-on-rails forms


    【解决方案1】:

    最好的方法是 AJAX 调用。 在开始时只需填充类别下拉列表。并在更改类别时进行 ajax 调用并填充组。并对组下拉更改中的成员执行相同操作。

    试试这样的:

    $("#category']").click(function(){
      var url = '/get_drop_down_options?category_id=' + $(this).val()
      $("#group").removeOption(/./)
      $.get(url, function(data) {
        $('#group').addOption(data, false);
      });
    });
    

    在您的控制器中:

    def get_drop_down_options
      val = params[:category_id]
      #Use val to find records
      options = YourModel.collect{|x| "'#{x.id}' : '#{x.label}'"}    
      render :text => "{#{options.join(",")}}" 
    end
    

    现在你不需要部分了。

    【讨论】:

    • 是的。 jQuery 将最适合您的要求
    • hmmm...我在使用JQuery的时候还有一个奇怪的事情。 $.getJSON 将检索类似 {'1' : 'first','2' : 'second'} 但这个 JSON 家伙被标记为无效 JSON...你知道吗?
    • 是的,我明白了,应该是{"1" : "first","2" : "second"},用双头代替单头。
    • 为此需要某种插件吗?当我尝试这个解决方案时,我得到一个 TypeError ,表明“addOption”不是该对象的方法。
    【解决方案2】:

    我会为每个字段设置不同的 ID,并使用一些 jquery 动画和 ajax 魔法: 当一个字段被点击时,我会做一个 ajax 调用来检索子组的所有记录,一旦我得到它们,让那个 div 出现一个向下滑动的动画,或类似的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 2011-10-09
      • 2015-11-27
      • 2011-07-22
      相关资源
      最近更新 更多