多対多の関係を作りたいですが、
createとupdateの時うまくいかないため、
質問をさせていただきました。
[app/controllers/admin/stylists_controller.rb]
lang
1 def new 2 @stylist = Stylist.new 3 end 4 5 def create 6 @stylist = Stylist.new(stylist_params) 7 if @stylist.save 8 redirect_to admin_stylists_path 9 else 10 render 'new' 11 end 12 end 13 14 private 15 def stylist_params 16 params[:stylist].permit(:name, :furigana, :email, :tel, :area_ids => []) 17 end
[app/views/admin/stylists/new.html.erb]
lang
1<div class="col-md-4 col-md-offset-4"> 2 <%= simple_form_for [:admin, @stylist] do |f| %> 3 <div class="form-group"> 4 <%= f.input :name, label: '名前', input_html: { class: "form-control"} %> 5 <%= f.input :furigana, label: 'ふりがな', input_html: { class: "form-control"} %> 6 <%= f.input :email, label: 'メールアドレス', input_html: { class: "form-control"} %> 7 <%= f.input :tel, label: '電話番号', input_html: { class: "form-control"} %> 8 <%= f.input :areas, label: 'エリア', collection: Area.all, as: :check_boxes, input_html: { class: "checkbox" } %> 9 </div> 10 <div class="form-actions"> 11 <%= f.button :submit, '確定', disable_with: "Submiting...", class: "btn btn-primary" %> 12 </div> 13 <% end %> 14</div>
[app/models/stylist.rb]
lang
1class Stylist < ActiveRecord::Base 2 has_many :stylist_areas 3 has_many :areas, :through => :stylist_areas 4end
[app/models/area.rb]
lang
1class Area < ActiveRecord::Base 2 has_many :stylist_areas 3 has_many :stylists, through: :stylist_areas 4end
[app/models/stylist_area.rb]
lang
1class StylistArea < ActiveRecord::Base 2 belongs_to :stylist 3 belongs_to :area 4end
[db/seeds.rb]
lang
1["京都", "大阪", "神戸"].each do |area| 2 Area.find_or_create_by!(name: area) 3end
以上の設定でやってみたら、
lang
1 Parameters: {"utf8"=>"✓", "authenticity_token"=>"Oz2LCnpAvN9VbpE2N1Cce7se0Klxrl6d0hVBGc9lsO+i4mm0VzJ6mBQx2kQXdtiDlBCB6PsuymTZ/ysoiKWePA==", "stylist"=>{"name"=>"ヘアメイク1", "furigana"=>"へあめいく1", "email"=>"111@mail.com", "tel"=>"00-0001-0001", "areas"=>["1", "2", ""]}, "commit"=>"確定", "id"=>"2"} 2 Admin Load (0.1ms) SELECT "admins".* FROM "admins" WHERE "admins"."id" = ? ORDER BY "admins"."id" ASC LIMIT 1 [["id", 1]] 3 Stylist Load (0.1ms) SELECT "stylists".* FROM "stylists" WHERE "stylists"."id" = ? LIMIT 1 [["id", 2]] 4Unpermitted parameter: areas 5 (0.0ms) begin transaction 6 (0.0ms) commit transaction 7Redirected to http://127.0.0.1:3000/admin/stylists 8Completed 302 Found in 3ms (ActiveRecord: 0.2ms)
まずParameters{...}に
areas"=>["1", "2", ""]
謎の空の値が出てきました・・・
また
Unpermitted parameter: areas
と許可されていないparametersだと怒られました。
いろいろぐぐってみたら、strong parametersのとこで
:area_ids => []
と書けば直るとのことですが・・・
ご回答頂ければと思います!
どうぞよろしくお願いします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/17 03:06