我正在尝试为学校的索引创建比较功能。目前我正在使用以下代码,它接受任何检查学校并将其添加到params中的school_ids []。
在我的gemfile中:
gem 'will_paginate'
在我学校的index.html.erb:
<%= form_tag compare_path, :method => 'get' do %>
<%= submit_tag "Compare" %>
<ul>
<% @schools.each do |school| %>
<li>
<%= check_box_tag'school_ids[]', school.id %>
<%= link_to school.name, school %><br>
<%= school.city %>, <%= school.state %>
</li>
<% end %>
</ul>
<% end %>
在我的学校控制器中,我有:
def compare
@schools = School.find(params[:school_ids])
end
只要所有支票学校都在同一页面上,这项工作就很有效。但由于我使用will_paginate对学校列表进行分页,如果我更改页面,则复选框不会保留。我假设我需要以某种方式保存到会话。
答案 0 :(得分:0)
您的意思是您希望能够在索引的第1页上为学校A添加复选标记,转到索引的第2页并为学校B添加另一个复选标记,然后提交比较表格并查看学校A和B?如果是这种情况,那么你是正确的,你需要将复选框放入会话中。附加js点击事件,例如
$('.checkbox_class').click(function(){
$.post('update_session_method', { school_id: $(this).val(), checked: $(this).is(:checked)]);
});
然后添加控制器方法
def update_session_method
session[:school_ids] ||= []
if params[:checked]
session[:school_ids] << params[:school_id]
else
session[:school_ids].delete(params[:school_id])
end
end
然后你的比较方法
def compare
@schools = School.find(params[:school_ids].merge(session[:school_ids] || []))
end