2

ユーザーが初めてページにアクセスしたときにチェックボックスをオンにしたい。

このファイルは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 => trueindex.html.hamlcheck_box_tag

4

1 に答える 1

0

これを実現するには、localstorage + JavaScript を使用できます。ページの読み込み時に、ローカル ストレージのプロパティの値を確認します。値が設定されている場合は、ボックスをチェックしないでください。値が設定されていない場合は、すべてのチェック ボックスをオンにして、localstorage に値を設定します。

ヴァルン

于 2012-10-22T07:42:49.357 に答える