2013-11-22 28 views
0

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

我用我的两个概念,教程是这些: 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() 

所以,我这是如何工作的理解是,我点击一个按钮时, helper方法创建一个新的关联,获取id,从部分中呈现html,而咖啡脚本只是用当前的日期时间替换对象的id,所以我可以添加多个关联,而不需要它们具有相同的id。

问题是,如何更改链接的函数的JavaScript,以获得选择框的ID,因为现在我不知道如何创建一个动态JavaScript来接受日期时间coffescript或让javascript搜索它们并改变它自己。

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

回答

0

呵呵,解决方案如预期的那样容易。用下面的命令你可以得到嵌套资源的子指数:

<%= 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'); 
    });