帖子#中的NoMethodError在RailsGuides的6.4节中显示错误

时间:2013-08-18 18:46:27

标签: ruby-on-rails ruby methodnotfound

我正在尝试关注RailsGuides,http://edgeguides.rubyonrails.org/getting_started.html

现在,在我应该能够在我的博客网站上添加评论的第6.4节中,我遇到了这个错误:

NoMethodError in Posts#show
Showing C:/Sites/blog/app/views/posts/show.html.erb where line #12 raised: </br>
undefined method `comments' for #<Post:0x3a99668
下面的

是我的show.html.erb中的代码段      

<h2>Add a comment:</h2>
<%= form_for([@post, @post.comments.build]) do |f| %>
 <p>
   <%= f.label :commenter %><br>
   <%= f.text_field :commenter %>

以下是我的评论控制器的摘录:

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

  private
    def comment_params
      params.require(:comment).permit(:commenter, :body)
    end
end

以下是我的帖子控制器:

class PostsController < ApplicationController
def new
     @post = Post.new
end

def create
    @post = Post.new(params[:post].permit(:title, :text))

    if @post.save
        redirect_to @post
    else
        render 'new'
    end
end

def show
    @post = Post.find(params[:id])
end

def index
    @posts = Post.all
end

def edit
    @post = Post.find(params[:id])
end

def update
    @post = Post.find(params[:id])

    if @post.update(params[:post].permit(:title, :text))
        redirect_to @post
    else
        render 'edit'
    end
 end

 def destroy
      @post = Post.find(params[:id])
      @post.destroy

      redirect_to posts_path
     end

private
  def post_params
    params.require(:post).permit(:title, :text)
  end
end

请帮助我谢谢。

-aguds

1 个答案:

答案 0 :(得分:0)

这是说

第12行:筹集: 对于#&lt; 未定义的方法`comments'发布:0x3a99668&gt;“

这意味着在show.html.erb的第12行,您在Post的对象上调用 comments 方法,但该方法未定义。

因此,您需要检查Post类中是否存在以下关系。

应用程序/模型/ post.rb

has_many :comments

添加新模型后,服务器需要重新启动。 (你添加了评论。)

这里的一般经验法则是对app /或config / routes之外的任何内容进行更改.rb将需要重新启动。

参考:When do I need to restart server in Rails?