How to create check boxes, select multiple items and store them -- in rails? -


working on video-game review website practice.

when creating new video-game object, have assign platforms them (xbox, playstation etc.)

my form below , game model has many platforms, while platforms model belongs game

currently use collection select. how turn checkboxes, , able select multiple platofrms checkboxes , save them?

thanks much.

server log

started patch "/games/6" ::1 @ 2015-07-08 05:07:59 -0400 processing gamescontroller#update html   parameters: {"utf8"=>"√", "authenticity_token"=>"n9+tnko0702pgpdbc3/rzdqgx92yr zzymkw3zd+dlwjl+zvqlrea1yby1/xexjvexr+sht8xgxod0ytcl+dnmw==", "game"=>{"title"=> "test", "release_date(1i)"=>"2015", "release_date(2i)"=>"7", "release_date(3i)"= >"8", "genre_id"=>["1", ""], "platform_id"=>["1", ""]}, "commit"=>"update game",  "id"=>"6"}   user load (0.0ms)  select  "users".* "users" "users"."id" = ?  orde r "users"."id" asc limit 1  [["id", 1]]   game load (1.0ms)  select  "games".* "games" "games"."id" = ? limit  1  [["id", 6]] unpermitted parameters: genre_id, platform_id    (0.0ms)  begin transaction    (0.0ms)  commit transaction redirected http://localhost:3000/games/6 completed 302 found in 10ms (activerecord: 1.0ms)   started "/games/6" ::1 @ 2015-07-08 05:07:59 -0400 processing gamescontroller#show html   parameters: {"id"=>"6"}   user load (0.0ms)  select  "users".* "users" "users"."id" = ?  orde r "users"."id" asc limit 1  [["id", 1]]   game load (0.0ms)  select  "games".* "games" "games"."id" = ? limit  1  [["id", 6]]    (0.0ms)  select count("previews"."vote") "previews" "previews"."ga me_id" = ?  [["game_id", 6]]   cache (0.0ms)  select count("previews"."vote") "previews" "previews "."game_id" = ?  [["game_id", 6]]    (0.0ms)  select count("reviews"."vote") "reviews" "reviews"."game_ id" = ?  [["game_id", 6]]   cache (0.0ms)  select count("reviews"."vote") "reviews" "reviews"." game_id" = ?  [["game_id", 6]]   news load (1.0ms)  select  "news".* "news" "news"."game_id" = ?  or der "news"."id" desc limit 5  [["game_id", 6]]   rendered games/_review.html.erb (2.0ms)   review load (1.0ms)  select "reviews".* "reviews" "reviews"."game_i d" = ?  [["game_id", 6]]    (0.0ms)  select count(*) "reviews" "reviews"."game_id" = ?  [["gam e_id", 6]]   review load (0.0ms)  select  "reviews".* "reviews" "reviews"."game_ id" = ?  order "reviews"."id" desc limit 5  [["game_id", 6]]   rendered games/show.html.erb within layouts/application (16.0ms) completed 200 ok in 162ms (views: 157.1ms | activerecord: 2.0ms) 

server log 2 when using emu's suggestion <-- still not saving, unpermitted parameters error gone.

started patch "/games/6" ::1 @ 2015-07-08 05:56:55 -0400 processing gamescontroller#update html   parameters: {"utf8"=>"√", "authenticity_token"=>"lzku1wa89d6a2i2yarfyiyqwfhlcw iigah0pv6xpuajthyghujkarbuwcpvxliwyoakvsbeip6fxyhmwvzmymw==", "game"=>{"title"=> "test", "release_date(1i)"=>"2015", "release_date(2i)"=>"7", "release_date(3i)"= >"8"}, "platform_ids"=>["4", "5"], "commit"=>"update game", "id"=>"6"}   user load (0.0ms)  select  "users".* "users" "users"."id" = ?  orde r "users"."id" asc limit 1  [["id", 1]]   game load (0.0ms)  select  "games".* "games" "games"."id" = ? limit  1  [["id", 6]]    (0.0ms)  begin transaction    (0.0ms)  commit transaction    (0.0ms)  begin transaction    (0.0ms)  commit transaction redirected http://localhost:3000/games/6 completed 302 found in 9ms (activerecord: 0.0ms)   started "/games/6" ::1 @ 2015-07-08 05:56:55 -0400 processing gamescontroller#show html   parameters: {"id"=>"6"}   user load (0.0ms)  select  "users".* "users" "users"."id" = ?  orde r "users"."id" asc limit 1  [["id", 1]]   game load (0.0ms)  select  "games".* "games" "games"."id" = ? limit  1  [["id", 6]]    (0.0ms)  select count("previews"."vote") "previews" "previews"."ga me_id" = ?  [["game_id", 6]]   cache (0.0ms)  select count("previews"."vote") "previews" "previews "."game_id" = ?  [["game_id", 6]]    (0.0ms)  select count("reviews"."vote") "reviews" "reviews"."game_ id" = ?  [["game_id", 6]]   cache (0.0ms)  select count("reviews"."vote") "reviews" "reviews"." game_id" = ?  [["game_id", 6]]   news load (0.0ms)  select  "news".* "news" "news"."game_id" = ?  or der "news"."id" desc limit 5  [["game_id", 6]]   rendered games/_review.html.erb (7.0ms)   review load (0.0ms)  select "reviews".* "reviews" "reviews"."game_i d" = ?  [["game_id", 6]]    (0.0ms)  select count(*) "reviews" "reviews"."game_id" = ?  [["gam e_id", 6]]   review load (1.0ms)  select  "reviews".* "reviews" "reviews"."game_ id" = ?  order "reviews"."id" desc limit 5  [["game_id", 6]]   rendered games/show.html.erb within layouts/application (26.0ms) completed 200 ok in 197ms (views: 177.1ms | activerecord: 3.0ms) 

games table

create_table "games", force: :cascade |t|     t.string   "title"     t.string   "image"     t.date     "release_date"     t.datetime "created_at",   null: false     t.datetime "updated_at",   null: false     t.integer  "platform_id"     t.integer  "genre_id"     t.integer  "review_id"     t.integer  "steelbook_id"   end 

_game.html.erb <-- if change check boxes use "genre_ids" , "platform_ids" no method error @ games#edit controller

<%= form_for @game |g| %>      <p><%= g.label :title %></p>     <p><%= g.text_field :title %></p>      <p><%= g.label :release_date %></p>     <p><%= g.date_select :release_date %></p>      <p><%= g.label :genre_id %></p>     <p><%= g.collection_check_boxes :genre_id, @genres, :id, :category %></p>      <p><%= g.label "platform(s)" %></p>      <p><%= g.collection_check_boxes :platform_id, @platforms, :id, :system %></p>      <p><%= g.label :image %></p>     <p><%= g.file_field :image %></p>  <hr>     <p><%= g.submit %></p>  <% end %> 

game controller

class gamescontroller < applicationcontroller      before_action :authenticate_user!     before_action :set_game, only: [:show, :edit, :update, :destroy]       def index         @games = game.all     end      def show         @reviews = review.where(game_id: @game.id)         @previews = preview.where(game_id: @game.id)         @news = news.where(game_id: @game.id)     end      def create         @game = game.new(game_params)         @game.save         redirect_to @game     end      def new         @game = game.new         set_platforms         set_genres     end      def edit         set_platforms         set_genres     end      def update         @game.update(game_params)         redirect_to @game     end      def destroy         @game.destroy         redirect_to root_path     end  private      def game_params        params.require(:game).permit(:title, :image, :release_date, :genre_ids => [], :platform_ids => [])     end      def set_game         @game = game.find(params[:id])     end      def set_platforms         @platforms = platform.order(:system)     end      def set_genres         @genres = genre.order(:category)     end  end 

routes

rails.application.routes.draw    devise_for :users    root "games#index"    resources :games     resources :news     resources :reviews, except: [:show]     resources :previews, except: [:show]   end    resources :platforms   resources :genres  end 

platforms model

class platform < activerecord::base     belongs_to :game end 

game model

class game < activerecord::base      has_many :platforms     has_many :preview, through: :users     has_many :reviews, through: :users     has_many :news      has_one :genre    end 

you can use collection_check_boxes.

<p><%= g.collection_check_boxes :platform_ids, @platforms, :id, :system %></p> 

and change game_params following.

def game_params    params.require(:game).permit(:title, :image, :release_date, :genre_id, :platform_ids => []) end 

didn't tested it. guess require little tweak in code.


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -

How to provide Authorization & Authentication using Asp.net, C#? -