2013-07-24 50 views
0

我試圖創建的學校索引的比較功能。目前,我正在使用以下代碼,它會接受任何已檢查的學校並將其添加到params中的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

你的意思是你要能夠複選標記添加到一所學校第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