2012-10-29 63 views
1

我試圖通過PARAMS通過使用搜查得到一個形式,它通常會正常工作。處理複雜的GET PARAMS在軌

控制器(使用ransack

def index 
    @search = Record.ransack(params[:q]) 
    @records = @search.result.page(params[:page]) 
    end 

視圖

<ul> 
    <% Genre.all.each do |genre| %> 
    <% category_count = @search.result.joins(:genre).where("genres.id = ?", genre.id).size %> 
    <% unless category_count == 0 %> 
     <li> 
      <%= link_to genre.name, params.merge(:"q[genre_name_eq]" => genre.name) %> (<%= category_count %>) 
     </li> 
    <% end %> 
    <% end %> 
</ul> 

但一直收到重複:正確

q[genre_name_eq]=Rockabilly&q[genre_name_eq]=Rockabilly 

在不將q []它所管理的參數,可以覆蓋前一個。

也試過params[:q].merge(:genre_name_eq)這會導致問題時,有沒有Q [],它也只是不工作,給我genre_name_eq=並沒有Q []

如何還能怎麼處理Q [],使它取代了價值而不是多次重複?

+0

你可以粘貼PARAMS和params.merge(q: 「q [genre_name_eq]」=> genre.name)? – AnandVeeramani

+0

OK,更新了更多的細節。 – ere

回答

1

編輯(在您編輯後)

params是一個哈希,而不是一個簡單的查詢字符串。如果你想更新一個嵌套值,你必須更新嵌套散列。

首先確保params[:q]存在且是一個散列(控制器)

params[:q] ||= {} 

然後只更新視圖

<% params[:q].update :genre_name_eq => genre.name %> 
<%= link_to genre.name, params %> 
+0

與一組則params的偉大工程,但在與另一組則params的結合使用時,說'Q [record_format_name_eq]'它總是選擇最後一個(流派),即使沒有任何已被選中。 – ere