2013-08-16 56 views
0

在我的情況,我有使用參數鏈接,並使用參數合併鏈接並選擇PARAMS

選擇。如果我有選擇(:per_page)過濾@posts,然後用(:pub) PARAMS一切都很好,因爲我在鏈接中使用params.merge

但現在如果我想使用第一個鏈接,然後選擇,它不起作用,因爲我不知道我應該在哪裏寫params.merge在我的選擇。從我的控制器

代碼:從視圖

<%= select_tag :per_page, options_for_select(%w(1 2 3), params[:per_page].to_i), :onchange => "if(this.value){window.location='?per_page='+this.value;}" %> 

<%= link_to "unpubl", params.merge(:pub => :f) %> 
<%= link_to "publ", params.merge(:pub => :t) %> 

回答

0

def index 
    @posts = Post 
    @posts = @posts.published unless params[:pub] 
    @posts = @posts.where(:published => params[:pub]) if params[:pub] 
    @posts = @posts.page(params[:page]).per(params[:per_page] || 5) 
    end 

代碼如果我理解正確,您嘗試創建某種HTML過濾器傳遞到您的控制器嗎?

如果是這種情況,您應該使用form構建您的HTML過濾器。這樣你就不必處理將你的選項「合併」爲params散列。該表格將爲您照顧。

實施例:

<%= form_tag posts_path, method: :get %> 
    <%= select_tag :per_page, options_for_select(%w(1 2 3), params[:per_page].to_i) %> 
    <%= check_box_tag 'published', 'true' %> 

    <%= submit_tag 'Submit' %> 
<% end %> 

然後在控制器中:

params[:published] 
params[:per_page] 

將持有相應的值。

更多有關form_taghere

+0

好的建議 但是當我嘗試這樣做,我有一個syntax_error '語法錯誤,意想不到的keyword_ensure,期待 –

+0

input'結束有一個失蹤報價在check_box_tag線。這就是爲什麼你會得到語法錯誤。 – Martijn

+0

我看到並且寫了 '<%= check_box_tag'published','true'%>' 但它仍然是syntax_error –