2012-10-13 4 views
2

비슷한 질문이 하나 또는 두 개있을 수 있지만 그 중 누구도 내가 다음에 잘못된 부분을 이해하는 것을 도왔습니다.rails form_tag with checkboxes

= form_tag movies_path,:id=>"ratings_form", :method => :get do 
    Include: 
    - @all_ratings.each_with_index do |rating, index| 
    = rating 
    = check_box_tag "ratings[]", rating, @selected_ratings.include?(rating), id:"ratings_#{rating}" 

내 컨트롤러 : 내보기에 다음 HAML 양식을

def index 
    sorting=params[:sorting_on_a_column] 
    if sorting=='1' 
     @sort='title' 
     @movies=Movie.order('title') 
    elsif sorting=='2' 
     @sort='date' 
     @movies=Movie.order('release_date') 
    else 
     @movies=Movie.all 
    end 
    @all_ratings=Movie.select(:rating).map(&:rating).uniq 
    @selected_ratings = (params["ratings"].present? ? params["ratings"] : @all_ratings) 
    @movies = @movies.where(":rating IN (?)", params["ratings"]) if params["ratings"].present? and params["ratings"].any? 
    end 
위의 내 목표는 (은 않습니다) 제목이나 출시일에 의해 영화를 정렬하는 것입니다

선택된 체크 박스에 해당하는 영화 만 보여줍니다. Ruby와 Rails에 익숙하지 않아서 정말 감사드립니다. 미리 감사드립니다! 방법은 여러 가지 등급이있다 -

1

: 생각하는

답변

3

몇 가지? 다른 모델의 데이터베이스 테이블에 표시된 내용을 기반으로 @all_ratings을 지정합니다. 등급 모델이 없으면 시간의 경과에 따라 등급의 전체 목록이 커질 수 있습니다.

2 - 당신은이처럼 체크 박스 태그를 설정할 수 있습니다

- @all_ratings.each_with_index do |rating, index| 
    = label_tag "rating_#{rating}", rating 
    = check_box_tag "ratings[]", rating, @selected_ratings.include?(rating), id: "rating_#{rating}" 

이 당신에게-이기 때문에 코드에서 작동합니다 params["ratings"]에서 문자열 값의 배열을 제공 할 것입니다.

레이블 태그는 텍스트를 클릭하면 해당 확인란을 선택하도록 설정됩니다. .each_with_index은 각 등급에 고유 한 ID를 제공하는 데 사용됩니다. 지금은 데이터베이스의 ID가 없습니다 (에있는 "rating_#{index}" ID 선언과 일치 함).

+0

우선, 시간을내어 주셔서 감사합니다. 내가 말한 것처럼 (나는 단지 확인란의 텍스트를 클릭하는 기능을 건너 뛰었습니다) 위의 내용을 편집했지만, 여전히 작동하지 않습니다. 이것은 정의되지 않은 방법 배열의 경우 – Controller

+0

두 번째 줄부터 마지막 ​​줄까지 :'@movies = Movie.where ('... –

+0

) 나는 다른 방식으로 작동하도록 만들었지 만 도움을 청하기 위해 1 번 (15 번 D에 도달했을 때) – Controller