1

現在、検索gemRansackをRubyon Rails 3.0アプリケーションに統合しましたが、基本的な検索は正常に機能し、すべてのrubyコードは正常に機能します。しかし、RyanBatesのRailscastfor 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

私はすでにエラーを検索して解決しようとしましたが、正直なところ、なぜこれが起こっているのかわかりません。助けていただければ幸いです。

4

0 に答える 0