I am getting a ' undefined method error ' when saving a comment


#1

hi!! I am a newbie in ROR.

I have two models

Post
has_many :Comment

Comment
belongs_to :Post

the error displays when I try to save a comment related to certain post.
I get the following error

undefined method `comment’ for nil:NilClass

my comment controllers

def new
@comment = Comment.new
render :layout => false
end

def create
@post = Post.find_by_id(params[:id])
@post_comment = @post.comment.create(params[:comment])
if @post_comment.save
redirect_to post_index_path
flash[:success] = “comment created!!”
end

Could someone please explain why am I getting this error…

Thanks in advance :slight_smile:


#2

Thank you support.


#3

You shold use

has_many :comments

instead of

has_many :comment

Then you can call

@post.comments

Look this example:
http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

Take a look at accepts_nested_attributes to create your posts:

2013/8/22 ank k. removed_email_address@domain.invalid


#4

THanks


#5

On 22 August 2013 20:56, ank k. removed_email_address@domain.invalid wrote:

hi!! I am a newbie in ROR.

I have two models

Post
has_many :Comment

that should be
has_many :comments
note that it is plural and lower case

Comment
belongs_to :Post

belongs_to :post

@comment = Comment.new
render :layout => false
end

def create
@post = Post.find_by_id(params[:id])
@post_comment = @post.comment.create(params[:comment])

You have not told us which line the error points to but I guess it is
the one above. If so then it is saying that @post is nil, so your
find_by_id did not find anything. You don’t need to use find_by_id,
you can just use
@post = Post.find( params[:id] )
Perhaps there is not a Post object with the correct id. If you look
in log/development.log you will see the params you are passing which
may give you a clue.

I suggest, however, that as a beginner you work right through a good
tutorial such as railstutorial.org (which is free to use online).
That will show you the basics of rails.

Also see the Rails Guides.

Colin