我目前在我的 Ruby on Rails 3.0 应用程序中集成了搜索 gem Ransack,基本搜索工作正常,所有 ruby 代码工作正常。但我在 Ryan Bates 的 Railscast for Ransack (http://railscasts.com/episodes/370-ransack) 的帮助下创建了一个用于动态添加或删除更多搜索字段的表单。
这是我的链接:
<%= link_to_add_fields "Add Conditions", f, :condition %>
这是我的部分领域:
<div class="field">
<%= f.attribute_fields do |a| %>
<%= a.attribute_select %>
<% end %>
<%= f.predicate_select :only => [:eq, :not_eq, :matches, :does_not_match, :lt, :lteq, :gt, :gteq, :cont, :not_cont, :start, :not_start, :end, :not_end, :true, :false, :present, :blank], :compounds => false %>
<%= f.value_fields do |v| %>
<%= v.text_field :value %>
<% end %>
<%= link_to "remove", '#', class: "remove_fields" %>
</div>
我的应用程序助手:
def link_to_add_fields(name, f, type)
new_object = f.object.send "build_#{type}"
id = "new_#{type}"
fields = f.send("#{type}_fields", new_object, child_index: id) do |builder|
render(type.to_s + "_fields", f: builder)
end
link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("\n", "")})
end
最后是 jQuery 代码:
(function(){
jQuery(function($) {
$('form').on('click', '.remove_fields', function(event) {
$(this).closest('.field').remove();
return event.preventDefault();
});
return $('form').on('click', '.add_fields', function(event) {
var regexp, time;
time = new Date().getTime();
regexp = new RegExp($(this).data('id'), 'g');
$(this).before($(this).data('fields').replace(regexp, time));
return event.preventDefault();
});
});
}).call(this);
虽然删除链接可以正常工作,但添加字段不起作用。相反,Firebug 向我抛出以下消息:
TypeError: $(this).data("fields") is undefined
我已经尝试搜索错误并解决它,但老实说,我不知道为什么会发生这种情况,并且非常感谢一些帮助。