我有一个运行Ruby 2的Web应用程序,一个Rails 4和一个非常复杂的表单。我试图做的是将嵌套表单与链式选择结合起来。问题是嵌套资源的字段是动态创建的,并且给出了日期和时间的唯一组合,但在我的javascript中,我需要定义哪个select被链接到哪个select。
我用于概念的两个教程是: 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,而coffee脚本只是用当前的内容替换对象的id日期时间,所以我可以添加多个关联,而不具有相同的ID。
问题是,如何更改链接函数的javascript,以获取选择框的ID,因为现在我不知道如何创建一个动态的javascript来接受来自coffescript的日期时间或者让javascript搜索它们并自行更改。
任何帮助或提示都将不胜感激!
答案 0 :(得分: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');
});