我的视图中有一个 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]);
}
});
任何帮助,将不胜感激!