Checking if Forum_Thread is updating?
Now the actual update is simple it's just @forum_thread.update params and redirect, but as you can see it redirects to the forum_thread which renders the show.html.erb which then causes @forum_post to create a new post which is causing duplicate entries after updating...
I thought a simple check with @forum_thread.update //nothing here else // new forum post end would solve it, no... just causes argument errors.
Also the user data isn't being supplied when updating, I have added @forum_post.user = current_user in the update but does nothing...
Forum Thread Controller
Forum Threads Controller
class ForumThreadsController < ApplicationController before_action :authenticate_user!, except: [:index, :show] before_action :set_forum_thread, except: [:index, :new, :create] def index @q = ForumThread.search(params[:q]) @forum_threads = @q.result(distinct: true) end def show if @forum_thread_updating = true # Nothing happens when updating else @forum_post = ForumPost.new end end def new @forum_thread = ForumThread.new @forum_thread.forum_posts.new end def create @forum_thread = current_user.forum_threads.new forum_thread_params @forum_thread.forum_posts.first.user_id = current_user.id if @forum_thread.save redirect_to @forum_thread else render action: :new end end def edit @forum_thread_updating = true @forum_post.user = current_user end def update if @forum_thread.update forum_thread_params and @forum_post.user = current_user redirect_to @forum_thread else render 'edit' end end def destroy @forum_thread.destroy redirect_to root_path end private def set_forum_thread @forum_thread = ForumThread.find(params[:id]) @forum_post = ForumPost.find(params[:id]) end def forum_thread_params params.require(:forum_thread).permit(:subject, forum_posts_attributes: [:body], forum_posts_attributes.where([:id =>])) end end
So one thing here is your set_forum_thread method is trying to do something that doesn't quite make sense. Your URL has an ID in it and that represents one single record, but you're using it to find two records. Really you want this to
Assuming you're using nested routes, you will have a URL like this:
/forum_threads/:forum_thread_id/forum_posts/:id and you want to make sure you use the correct one of those params for looking up the different tables.
def set_forum_thread @forum_thread = ForumThread.find(params[:forum_thread_id]) end
The forum_threads model doesn't have :forum_thread_id but forum_posts does.
I have the find :foumd_thread_id in the posts model.
Well, the params in the routes are used to lookup the ID column in the tables. You're using the same params id to look up two different records which doesn't quite make sense there. I would not set the forum_post in that before_action so that you don't run into weirdness.