我想要在用户第一次访问该页面时检查复选框。
此文件为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
上,但每次刷新页面时都会选中复选框。
每次我检查一个特定的复选框并点击刷新按钮时,页面都会加载并检查所有复选框。
答案 0 :(得分:0)
您可以使用localstorage + JavaScript来实现此目的。在页面加载时,检查localstorage中属性的值。如果设置了该值,请不要选中复选框。如果未设置值,请选中所有框并在localstorage中设置值。
Varun的