前提・実現したいこと
Ruby on Railsの勉強中です。
店舗情報を登録するシステムを作っています。
登録画面で、店舗情報と営業形態情報を入力し、それぞれのテーブルに登録したいです。
発生している問題
登録画面では店舗名称を入力し
チェックボックスで営業形態(イートイン、テイクアウト、宅配など)を一つ以上選択します。
店舗テーブルの登録は出来るのですが、営業形態テーブルのINSERT文が発行されておらず、登録されません。
エラーは出ておりません。
ソースは以下の通りです。
該当のソースコード
######models\t_store_content.rb
ruby
1class TStoreContent < ApplicationRecord 2 has_many :t_eigyo_types, class_name: "TEigyoType", dependent: :destroy 3 has_many :m_eigyo_types, class_name: "MEigyoType", through: :t_eigyo_types 4 accepts_nested_attributes_for :t_eigyo_types 5end
######models\t_eigyo_type.rb
ruby
1class TEigyoType < ApplicationRecord 2 belongs_to :store_content, class_name: "TStoreContent", foreign_key: "t_store_content_id" , optional: true 3 belongs_to :m_eigyo_type, class_name: "MEigyoType", foreign_key: :eigyo_type_id, optional: true 4end
######models\m_eigyo_type.rb
ruby
1class MEigyoType < ApplicationRecord 2 has_many :t_eigyo_types, class_name: "TEigyoType" 3 has_many :t_store_contents, class_name: "TStoreContent", through: :t_eigyo_types 4end
######controllers\contents_controller.rb
ruby
1class ContentsController < ApplicationController 2 3 def new 4 @content = TStoreContent.new 5 TEigyoType.count.times{ @content.t_eigyo_types.build } 6 end 7 8 def create 9 @content = TStoreContent.new(permit_params) 10 11 if @content.save 12 ...省略... 13 end 14 end 15 16 private def permit_params 17 params.require(:t_store_content).permit( 18 :store_name, 19 t_eigyo_types_attributes: [:eigyo_type_id] 20 ) 21 end 22end 23
######views\contents\new.html.erb
<div id="generic-form"> <%= form_with model: @content, url: :contents, id: "contentForm" do |f| %> <%= render "form", f: f %> <div> <%= f.submit "登録する", id: "submit" %> <%= link_to "キャンセル", :root %> </div> <% end %> </div>
######views\contents_form.html.erb
<div> <%= f.label :store_name, "店舗・施設名" %> <%= f.text_field :store_name, maxlength: 50 %> </div> <div> <%= fields_for :t_eigyo_types, @content.t_eigyo_types.build do |ef| %> <%= ef.label :eigyo_type_id, "営業形態" %> <%= ef.collection_check_boxes :eigyo_type_id, MEigyoType.all.order(:sort_no), :id, :eigyo_type_name %> <% end %> </div>
試したこと
ポストパラメータには値が入っています。
{"authenticity_token"=>"...省略...", "t_store_content"=> {"store_name"=>"カフェ", ...省略...}, "t_eigyo_types"=>{"eigyo_type_id"=>["", "1", "2"]}, "commit"=>"登録する"}
様々なページを見ましたが、何が足りないのか、どこが間違っているのかは分かりませんでした。。
ヒントだけでもいただけると助かります。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
ruby 2.6.4
rails 6.0.2.2
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。