Hi all!
I have 3 models: user, post, comment
User has_many :posts, :comments
Post belongs_to :user, has_many :comments
Comments belongs_to :user, post
So for creating post i have action create
def create
@post = Post.new(post_params)
if @post.save
redirect_to @post
else
render 'new'
end
end
Now if following the rules of relations between Post and Comment, for creating a comment i have next action in CommentController:
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(comment_params)
redirect_to post_path(@post)
end
My question is: How rewrite the actions if i want create post and comment from user?
if i try to create Comment from User, i create next action (don't know am i right?)
def create
@user = User.find(params[:user_id])
@post = user.posts.build(post_params)
if @post.save
flash[:success] = "Post created!"
redirect_to post_path
else
flash[:errors] = "Post not created!"
render 'new'
end
end
How create a comment from user, that will be in relations with post? i mean comment must have user_id and post_id?
tnx 4 help
--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/8a1c4cf8-cf08-4dad-b934-d0f27ce21684%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
sure.
def comment_params
params(:comment).merge!(:user_id => params[:user_id])
params.require(:comment).permit(:body, :user_id)
end
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/ae822215-0f1c-4efe-bcd9-70bc4bf97f87%40googlegroups.com.
PostController.rb
def new
@post = Post.new
end
def create
@post = current_user.posts.create post_params
end
private
def post_params
params.require(:post).permit(:title, :body)
end
CommentsController.rb
def new
@post = Post.find(params[:post_id])
@comment = @post.comments.new
end
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.new comment_params
@comment.user_id = current_user.id
if @comment.save
redirect_to @post
else
render action: new
end
end
private
def comment_params
params.require(:comment).permit(:body)
end