前提・実現したいこと
tweetテーブルとtagテーブルをアソシエーションしており、tweetを保存する際に、
tagのカラム(tag_name)を一緒に保存したく、accepts_nested_attributes_forを使用してます。
以下のエラーコードを確認すると、paramsには、tag_nameが入っているが、
"tag_attributes"=>{"tag_name"=>"testtest"}
その後、ROLLBACKしてしまっており、保存出来ていない。
※tweetテーブルのみを保存する際は、正しく出来ておりました。
ご指摘頂けないでしょうか。
※一つのtweetには、一つのtagしか付かない事とする。
該当ソースコード
<各model>
<tweet.rb> belongs_to :tag accepts_nested_attributes_for :tag <tag.rb> has_many :tweets
<tweets_controller>
def new @tweet = Tweet.new @tweet.build_tag end def create #binding.pry Tweet.create(tweet_params) end private def tweet_params params.require(:tweet).permit(:image, :text, :time, tag_attributes: [:tag_name]).merge(user_id: current_user.id) end
<tweet/new.html.haml>
= form_with(model: @tweet, local: true) do |form| = form.number_field :time, placeholder: "Time" = form.fields_for :tag do |tag_form| = tag_form.text_field :tag_name, placeholder: "tag" = form.text_field :image, placeholder: "Image Url" = form.text_area :text, placeholder: "comment" = form.submit "SEND"
<エラーコード>
Started POST "/tweets" for ::1 at 2020-02-04 20:35:37 +0900 Processing by TweetsController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"SW8hLHlout0cFZUagb/==", "tweet"=>{"time"=>"2", "tag_attributes"=>{"tag_name"=>"testtest"}, "image"=>"https://images/Rails1-4/sample.jpg", "text"=>"test222"}, "commit"=>"SEND"} User Load (0.9ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 ORDER BY `users`.`id` ASC LIMIT 1 ↳ app/controllers/tweets_controller.rb:50 (1.0ms) BEGIN ↳ app/controllers/tweets_controller.rb:17 User Load (3.9ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 LIMIT 1 ↳ app/controllers/tweets_controller.rb:17 (4.3ms) ROLLBACK ↳ app/controllers/tweets_controller.rb:17 Rendering tweets/create.html.haml within layouts/application Rendered tweets/create.html.haml within layouts/application (3.5ms) Completed 200 OK in 185ms (Views: 133.6ms | ActiveRecord: 10.0ms)
回答1件
あなたの回答
tips
プレビュー