0

我正在尝试为学校索引创建比较功能。目前我正在使用以下代码,它将任何已检查的学校添加到参数中的 school_ids[] 中。

在我的宝石文件中:

  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 对学校列表进行分页,因此如果我更改页面,复选框不会保留。我假设我需要以某种方式保存到会话。

4

1 回答 1

0

您的意思是您希望能够在索引的第 1 页上为学校 A 添加复选标记,转到索引的第 2 页并为学校 B 添加另一个复选标记,然后提交比较表并查看学校 A 和乙?如果是这种情况,那么您是正确的,您需要将复选框放入会话中。附加一个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
于 2013-07-24T18:25:10.770 回答