私のビューには、検索フィルターを設定する Semantic_form_for があり、JavaScript を介してフィルターを追加するボタンを使用してフィルターを追加します。
<%= semantic_form_for current_coach, :remote => true, :html => { :class => "custom-form rb-form", :id => "filter", :'data-url' => "#{roster_builder_coach_index_path}" } do |f| %>
<div class="filter_parent_container">
<% @search.conditions.each do |condition| %>
<%= render "filter", :condition => condition %>
<% end %>
</div>
<div class="bottom-info">
<div class="count">
<p class="num"><%= @athletes.count %></p>
<p>identified with this filter set</p>
</div>
<input type="submit" class="send-request" id="search-button" value="" />
<input type="button" class="add_filter" value="Add Another Filter" />
</div>
<div class="cl"> </div>
<% end %>
ajax経由でフォームを送信する必要がありますが、そうではありません。コントローラーのパラメーターを確認していますが、次のとおりです。
{"action"=>"roster_builder", "controller"=>"coach"}
コントローラーは次のとおりです(ロガーはパラメーターをチェックしています):
def roster_builder
authorize! :access_roster_builder, current_coach
logger.info("**************");
logger.info("**************");
logger.info("**************");
logger.info("**************");
logger.info("**************");
logger.info(params);
@search = Search.new(sport: current_coach.primary_sport, conditions: params[:search])
@athletes = @search.query.page(params[:page]).per_page(8)
render "athletes" if request.format.js?
end
Ajax 呼び出しは次のとおりです。
$("#filter").submit(function(){
$.ajax({
url: $("#filter").attr("data-url"),
type: 'POST',
success: function(data) {
$(".results")[0].parentNode.removeChild($(".results")[0]);
}
});
});
:remote => true を使用する前は機能していましたが、フィルター全体 (JS 経由で追加されたものを含む) を永続化する必要があるため、ページを更新するのではなく、検索を実行するために Ajax が必要です。Ajax がフォーム データを送信しているのに、params が機能しないのはなぜですか? 次のように、シリアル化されたデータを Ajax 経由で送信しようとしましたが、役に立ちませんでした。
$.ajax({
url: $("#filter").attr("data-url"),
type: 'POST',
data: $("form#filter").serialize(),
success: function(data) {
$(".results")[0].parentNode.removeChild($(".results")[0]);
}
});
どんな助けでも大歓迎です!