ユーザーが初めてページにアクセスしたときにチェックボックスをオンにしたい。
このファイルはapp/views/movies/index.html.haml
%h1 All Movies
= form_tag movies_path, :method => :get, :id => 'ratings_form' do
Include:
- @all_ratings.each do |rating|
= rating
= check_box_tag "ratings[#{rating}]", "1", @checked_ratings.include?(rating), :id => "ratings_#{rating}",
= submit_tag 'Refresh', :id => 'ratings_submit'
%table#movies
%thead
%tr
%th{:class => ("hilite" if @sort == "title")}= link_to "Movie Title", movies_path( :sort => "title", :ratings => @checked_ratings), :id => "title_header"
%th Rating
%th{:class => ("hilite" if @sort == "release_date")}= link_to "Release Date", movies_path( :sort => "release_date", :ratings => @checked_ratings), :id => "release_date_header"
%th More Info
%tbody
- @movies.each do |movie|
%tr
%td= movie.title
%td= movie.rating
%td= movie.release_date
%td= link_to "More about #{movie.title}", movie_path(movie)
= link_to 'Add new movie', new_movie_path
#This is my Controller
class MoviesController < ApplicationController
def show
id = params[:id] # retrieve movie ID from URI route
@movie = Movie.find(id) # look up movie by unique ID
# will render app/views/movies/show.<extension> by default
end
def index
#get all the ratings available
@all_ratings = Movie.all_ratings
@checked_ratings = (params[:ratings].present? ? params[:ratings] : [])
@sort = params[:sort]
@movies = Movie.scoped
if @sort && Movie.attribute_names.include?(@sort)
@movies = @movies.order @sort
end
id @checked_ratings.empty?
@checked_ratings = @all_ratings
end
unless @checked_ratings.empty?
@movies = @movies.where :rating => @checked_ratings.keys
end
end
def new
# default: render 'new' template
end
def create
@movie = Movie.create!(params[:movie])
flash[:notice] = "#{@movie.title} was successfully created."
redirect_to movies_path
end
def edit
@movie = Movie.find params[:id]
end
def update
@movie = Movie.find params[:id]
@movie.update_attributes!(params[:movie])
flash[:notice] = "#{@movie.title} was successfully updated."
redirect_to movie_path(@movie)
end
def destroy
@movie = Movie.find(params[:id])
@movie.destroy
flash[:notice] = "Movie '#{@movie.title}' deleted."
redirect_to movies_path
end
end
コントローラーでは、 が空の場合に設定@checked_rating
しますが、何もしません。を入れてみましたが、ページが更新されるたびにチェックボックスがオンになります。特定のチェックボックスをチェックして更新ボタンを押すたびに、すべてのチェックボックスがチェックされた状態でページが読み込まれます。@all_rating
@checked.rating
:checked => true
index.html.haml
check_box_tag