2012-10-29 3 views
1

GET을 통해 ransack을 사용하여 폼에 매개 변수를 전달하려고하면 병합하려고 할 때 params [: q]가 문제를 일으키는 것 외에는 정상적으로 작동합니다.레일에서 복잡한 GET 매개 변수 다루기

컨트롤러보기

<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> 

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

(ransack 사용)하지만 복제가 계속 다음 덮어 쓰기, 제대로 q는 []는 PARAMS을 관리하지 않고

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

을 이전 것. 이 날 genre_name_eq=을주고, 더 q는 []하고도 그냥 작동하지 않습니다이며, 더 q는 []

어떻게 다른 내가 그렇게 그 Q []를 처리 할 수없는 경우

또한 문제가 발생 params[:q].merge(:genre_name_eq) 시도 값을 여러 번 복제하는 대신 값을 대체합니까? (편집 한 후)

+0

당신이 PARAMS과 params.merge를 (붙여 넣을 수 있습니다 뷰에서

params[:q] ||= {} 

만 업데이트를 qparams[:q]합니다 (컨트롤러) 해시를 존재인지 확인 : "q [genre_name_eq]"=> genre.name)? – AnandVeeramani

+0

확인. 자세한 내용으로 업데이트되었습니다. – ere

답변

1

편집

params는 해시 아닌 간단한 쿼리 문자열입니다. 중첩 된 값을 업데이트하려면 중첩 된 해시를 업데이트해야합니다.

먼저

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

은 한 세트의 매개 변수와 잘 작동하지만 다른 매개 변수 세트와 함께 사용될 때'q [record_format_name_eq] '라고 말하면 아무 것도 선택되지 않은 경우에도 항상 마지막 장르 (장르)를 선택합니다. – ere