【问题标题】:How to implement chained selects in an RoR nested form?如何以 RoR 嵌套形式实现链式选择?
【发布时间】:2013-11-22 10:41:31
【问题描述】:

我有一个运行 Ruby 2 和 Rails 4 的 Web 应用程序和一个相当复杂的表单。我想要做的是将嵌套表单与链式选择结合起来。问题是嵌套资源的字段是动态创建的,并给出了日期和时间的唯一组合,但在我的 javascript 中,我需要定义哪个选择链接到其他选择。

我用于我的概念的两个教程是: http://homeonrails.blogspot.de/2012/01/rails-31-linked-dropdown-cascading.html http://railscasts.com/episodes/196-nested-model-form-revised

但重要的代码基本上在三个不同的文件中:

  $(document).ready(function(){
    $('select#device_name').chainedTo('select#room_name');
  });

这会将一个选择链接到另一个选择,并且可以在表单模板或 field_partial 中呈现。

辅助方法如下所示:

  def link_to_add_fields(name, f, association)
    new_object = f.object.send(association).klass.new
    id = new_object.object_id
    fields = f.fields_for(association, new_object, child_index: id) do |builder|
      render(association.to_s.singularize + "_fields", f: builder)
    end
    link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("\n", "")})
  end

最后但并非最不重要的咖啡脚本:

jQuery ->
  $('form').on 'click', '.remove_fields', (event) ->
    $(this).prev('input[type=hidden]').val('1')
    $(this).closest('fieldset').hide()
    event.preventDefault()

  $('form').on 'click', '.add_fields', (event) ->
    time = new Date().getTime()
    regexp = new RegExp($(this).data('id'), 'g')
    $(this).before($(this).data('fields').replace(regexp, time))
    event.preventDefault()

所以,我对其工作原理的理解是,我单击一个按钮,辅助方法创建一个新关联,获取 id,从部分渲染 html,然后咖啡脚本只是用当前的对象的 id 替换日期时间,所以我可以添加多个关联,而不需要它们具有相同的 id。

问题是,如何更改链接函数的 javascript 以获取选择框的 id,因为现在我不知道如何创建一个动态 javascript 来接受来自咖啡脚本的日期时间或者让 javascript 搜索它们并自行更改。

任何帮助或提示将不胜感激!

【问题讨论】:

    标签: javascript jquery ruby-on-rails nested-forms chained


    【解决方案1】:

    嗯,解决方案比预期的更容易。使用以下命令可以获得嵌套资源的子索引:

    <%= f.object_name.gsub(/[^0-9]+/,'') %>
    

    并且这个索引可以传递到 javascript 中以将两个选择链接到另一个:

      $(document).ready(function(){
        $('select#device_attributes_<%= f.object_name.gsub(/[^0-9]+/,'') %>_name').chainedTo('select#room_attributes_<%= f.object_name.gsub(/[^0-9]+/,'') %>_name');
      });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多