2013-07-24 2 views
0

Я пытаюсь создать функцию сравнения для индекса школ. В настоящее время я использую следующий код, который берет любую проверенную школу и добавляет ее в school_ids [] в параметрах.form_for сохранить входные значения для переменных сеанса

В моем 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

Я не использовал этот камень, но я это выглядит он добавляет номера страниц со ссылками внизу, каждая ссылка генерирует запрос. Этот запрос обрабатывается через ajax или обычный пост? –

+0

У меня нет времени на это, но я на 100% уверен, что есть способ передать другие параметры, чтобы они были разбиты на страницы. –

ответ

0

Вы хотите иметь возможность добавить галочку в школу A на странице 1 индекса, перейти на страницу 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 
Смежные вопросы