2

同様の質問が1つか2つあるかもしれませんが、次のどこが間違っているのかを理解するのに役立ったものはありませんでした。私の見解では、次のhamlフォームがあります。

= 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}"

そして私のコントローラーでは:

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

上記の私の目標は、タイトルまたはrelease_date(それが行う)で映画を並べ替え、チェックボックスに対応する映画のみを表示することです。私はRubyとRailsを初めて使用するので、本当に助けていただければ幸いです。ありがとうございます。前進!

4

1 に答える 1

3

考慮すべきいくつかのこと:

1-可能な評価はいくつありますか?@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宣言と一致しますcheck_box_tag)。

于 2012-10-13T18:59:46.653 に答える