前提・実現したいこと
現在、SNSサイトを作っていて行き詰まってしまったので質問しました。
グループがいくつかあって、そのグループに所属しているユーザーがグループに紐づいたトピックを作成することができるようにしたいです。
発生している問題・エラーメッセージ
topicのcreateの段階でgroup_idは保存されるのに、topic_idは保存されず、topicのshowページに飛ぶことができないということが起きています。
どなたかご教授お願いします。
該当のソースコード
controller
1class TopicsController < ApplicationController 2 def show 3 @topic = Topic.find(params[:id]) 4 end 5 6 def new 7 group = Group.find(params[:group_id]) 8 @topic = group.topics.new 9 end 10 11 def create 12 group = Group.find(params[:group_id]) 13 topic = topic.groups.build(topic_params) 14 topic.group_id = group.id 15 topic.save 16 redirect_to group_path(group.id) 17 end 18 19 private 20 def topic_params 21 params.require(:topic).permit(:topic_name, :topic_content, :user_id, :group_id, :user_topic_id) 22 end 23 24end 25
model
1class Group < ApplicationRecord 2 has_many :topics, dependent: :destroy 3 has_many :users, through: :group_members 4 has_many :group_members 5 accepts_nested_attributes_for :group_members 6 has_many :user_topics 7 8 # ユーザーがグループに参加してるかどうかのメソッドを定義 9 def joined_by?(user) 10 group_members.where(user_id: user.id).exists? 11 end 12end 13 14class Topic < ApplicationRecord 15 belongs_to :group 16 has_many :user_topics 17 has_many :users, through: :user_topics 18 19 def joined_by?(user) 20 user_topics.where(user_id: user.id).exists? 21 end 22end
db
1 create_table "groups", force: :cascade do |t| 2 t.integer "user_id" 3 t.string "group_name" 4 t.datetime "created_at", null: false 5 t.datetime "updated_at", null: false 6 end 7 8 create_table "topics", force: :cascade do |t| 9 t.integer "user_id" 10 t.integer "group_id" 11 t.string "topic_name" 12 t.string "topic_content" 13 t.datetime "created_at", null: false 14 t.datetime "updated_at", null: false 15 end
route resources :groups do resource :group_members, only: [:create, :destroy] resource :topics, only: [:new, :create, :index] end resources :topics do resource :user_topics, only:[:create, :destroy] end
binding.pryをしてみたところ
14: def create 15: group = Group.find(params[:group_id]) 16: topic = group.topics.build(topic_params) 17: binding.pry => 18: topic.group_id = group.id 19: topic.save 20: redirect_to group_path(group.id) 21: end [1] pry(#<TopicsController>)> topic => #<Topic:0x0000564777fb4bd0 id: nil, user_id: nil, group_id: 2, topic_name: "テスト", topic_content: "テスト", created_at: nil, updated_at: nil> [2] pry(#<TopicsController>)> group => #<Group:0x0000564777d9d3d8 id: 2, user_id: nil, group_name: "PHP", created_at: Sun, 11 Aug 2019 04:28:41 UTC +00:00, updated_at: Sun, 11 Aug 2019 04:28:41 UTC +00:00> [3] pry(#<TopicsController>)>
このようにtopicのidがnillになっています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/16 11:05