Ruby on Railsのフォームオブジェクトの関連付けについて質問があります。
https://teratail.com/questions/250421
上記のURLの続きの内容となります。
post_article_controller.rb def new @post_article_form = PostArticleForm.new end def create @post_article_form = PostArticleForm.new @post_article_form.assign_attributes(params[:form]) # ここでタグの文字列をパラメータでFormに送信しています @post_article_form.assign_tags(params[:tag_list]) @post_article_form.post_article.poster = current_user if @post_article_form.save redirect_to :root, notice: "投稿しました。" else render 'new' end end
post_article.rb def save_tags(tags) current_tags = self.tags.pluck(:name) unless self.tags.nil? old_tags = current_tags - tags new_tags = tags - current_tags # タグの削除 old_tags.each do |old_name| self.tags.delete(Tag.find_by(name: old_name)) end # タグの追加 new_tags.each do |new_name| tagging = Tag.find_or_create_by(name: new_name) self.tags << tagging end end
class PostArticleForm delegate :save, to: :post_article def initialize(post_article = nil) @post_article = post_article @post_article ||= PostArticle.new (5 - @post_article.photos.size).times do @post_article.photos.build end # ここでタグを生成しています @post_article.tags.build unless @post_article.tags.present? end def assign_tags(tag_list) tag_list = tag_list.split(",") post_article.save_tags(tag_list) # binding.pryでここで止めると以下のように目的のタグ以外にidがnilのタグが作成されています。 # コンソール => [#<Tag:0x007ffd242a34c8 id: nil, name: nil>, #<Tag:0x007ffd25ed34e0 id: 10, name: "入力したタグ名">] end
上記の、[#<Tag:0x007ffd242a34c8 id: nil, name: nil>, #<Tag:0x007ffd25ed34e0 id: 10, name: "入力したタグ名">]の部分にnilが入ってしまっているため「Field 'name' doesn't have a default value」というエラーが出てしまいタグの保存ができません。
何故でしょうか?
大変お手数をお掛けしますが、どなたかご教授の方をよろしくお願い致します
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/04/03 22:07
退会済みユーザー
2020/04/04 07:12 編集
退会済みユーザー
2020/04/04 14:02 編集
退会済みユーザー
2020/04/04 15:55 編集
2020/04/06 18:39