前提・実現したいこと
ユーザーの投稿(post)にタグ(tag)を1つ付けるようにしたいです。
投稿は必ずタグを付けるようにしたいです。
タグはシードデータを用意してあり、投稿ページからform.collection_selectを用いて送っています。
発生している問題・エラーメッセージ
Validation failed: Tag must exist Parameters: {"utf8"=>"✓", "authenticity_token"=>"bo5kzmM4xklO+a+e0WxdoAzzOIrvKdBtbGQdiMFFq2Q/lum3jBOkqm/gExxaM42YEQMiMIXe9MhnhAfVK9uQfg==", "post"=>{"tag_id"=>"6", "sake_name"=>"d", "meshi_name"=>"d", "content"=>"d"}, "commit"=>"投稿"}
該当のソースコード
class PostsController < ApplicationController def new @post = current_user.posts.build end def create @post = current_user.posts.build(post_params) @post.tag_id = params[:tag_id] if @post.save! flash[:success]="maru" redirect_to root_url else flash[:danger]="batsu" render :new end end private def post_params params.require(:post).permit(:sake_name,:meshi_name,:img,:content,:tag_id) end end
投稿ページ View <%= form_with(model: @post, local: true) do |f| %> <%= render 'layouts/error_messages', model: f.object %> <%= f.label :tag, 'タグ' %> <%= f.collection_select(:tag_id, Tag.all, :id,:name) %> <%= f.submit '投稿'%> <% end %>
Postモデル class Post < ApplicationRecord belongs_to :user belongs_to :tag validates :content, presence: true, length: { maximum: 400 } validates :sake_name, presence: true, length: { maximum: 50 } validates :meshi_name, presence: true, length: { maximum: 50} end
モデル class Tag < ApplicationRecord has_many :posts end
試したこと
rails consoleを使っての投稿はできました。
binding.pryで確認しましたが、tag_idは送られてませんでした。
pry(#<PostsController>)> params => <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"XNiuki0Y6vKEOjIrHZq08PSQ6/GjTfdlJefZzzpL8j1/61oxjRTS5iDr39+oIK9Qw2NrgrcUutyZ+KSEkTRoOw==", "post"=><ActionController::Parameters {"tag_id"=>"2", "sake_name"=>"a", "meshi_name"=>"a", "content"=>"a"} permitted: false>, "commit"=>"投稿", "controller"=>"posts", "action"=>"create"} permitted: false> [2] pry(#<PostsController>)> post_params => <ActionController::Parameters {"sake_name"=>"a", "meshi_name"=>"a", "content"=>"a", "tag_id"=>"2"} permitted: true> [3] pry(#<PostsController>)> @post => #<Post:0x00007f3c1507dac0 id: nil, sake_name: "a", meshi_name: "a", content: "a", img: nil, user_id: 1, tag_id: nil, created_at: nil, updated_at: nil>
PostモデルとTagモデルの関連が上手くできていないのかなとは思うのですがやり方がわかりません。
お手数ですが回答よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
rails5.2.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/28 07:39
2019/12/28 07:43