2017-09-03 120 views
0

我正在创建一个模型来为帖子添加评论。当我运行服务器时没有错误消息,但是当我填充文本框后单击“提交”按钮时,什么也没有发生。它不创建评论(并且没有错误消息)。现在我被卡住了。可以看看我的程序,并告诉我是否编码错了? 非常感谢您的支持Ruby on rails对帖子的评论

comments_controller.rb

class CommentsController < ApplicationController 
    def create 
     @post = Post.find(params[:post_id]) 
     @comment= @post.comments.create(params[:comment].permit(:comment)) 

    if @comment.save 
     redirect_to post_path(@post) 
    else 
     render 'new' 
    end 
    end 
end 

的意见/ _form.html.erb

<%= simple_form_for [@post, @post.comments.build] do |f| %> 
    <%= f.input :comment %> 
    <%= f.submit %> 
<% end %> 

帖子/ show.html .erb

<h1><%= @post.title %></h1> 
<p><%= @post.content %></p> 

<h3> Reply to thread </h3> 
<%= render "comments/form" %> 

回答

0

你是不是呈现评论中show.html.erb,也许添加这样的事情:

<h3>Comments</h3> 
<% @post.comments.each do |comment| %> 
    <p><%= comment.comment %></p> 
<% end %> 

而且它是非常令人困惑有comment场为Comment模式,也许将其更改为content或更有意义的东西。

+0

感谢您的反馈。即使我在代码中渲染评论,它仍然不起作用。 – Antoine

+0

@Antoine请用'create!'替换'create'并告诉我们是否有错误。 –

0

另外一件事我可以添加到这个answercreate方法会自动保存新的模型,以便无需再次运行.save我认为这将是更好地把它像

class CommentsController < ApplicationController 
    def create 
    @post = Post.find(params[:post_id]) 

    if @post.comments.create(params[:comment].permit(:comment)) 
     redirect_to post_path(@post) 
    else 
     render :new 
    end 
    end 
end 

也许保持您的问题,并使用.build而不是.create

+0

感谢您的反馈。我在'if'中使用'.build'和'.save'作为它工作的另一个模型。我想知道这次不是'[@post,@ post.comments.build]'这可能是错误的。 – Antoine

+0

'[@post,@ post.comments.build]'对我来说看起来不错,如果错误,简单的表单将失败。其他的替代方法是在控制器的'new'方法中定义'@ comment = @ post.comments.build',但它可以双向运行 –

+0

如果通过检查最后一条评论,构建成功,您可以随时登录'rails console'在那个帖子上创建并确保你允许从参数中写入密钥_i通常使用'params.require(:comment).permit(:comment)'哪个IMH更红宝石 –