问题
I want to add a comment model to my rails project but i got error in the render page saying:
error:
Showing /Users/sovanlandy/rails_projects/sample_app/app/views/shared/_comment_form.html.erb where line #4 raised:
undefined method `comment_content' for #<Comment:0x007fd0aa5335b8>
. Here are the related code
comment.rb
class Comment < ActiveRecord::Base
attr_accessible :comment_content
belongs_to :user
belongs_to :micropost
validates :comment_content, presence: true
validates :user_id, presence: true
validates :micropost_id, presence: true
end
micropost.rb
class Micropost < ActiveRecord::Base
attr_accessible :content
belongs_to :user
has_many :comments, dependent: :destroy
.....
end
user.rb
class User < ActiveRecord::Base
has_many :microposts, dependent: :destroy
has_many :comments
....
end
comments_controller.rb
class CommentsController < ApplicationController
def create
@micropost = Micropost.find(params[:micropost_id])
@comment = @micropost.comments.build(params[:comment])
@comment.micropost = @micropost
@comment.user = current_user
if @comment.save
flash[:success] = "Comment created!"z
redirect_to current_user
else
render 'shared/_comment_form'
end
end
end
Partial of _comment_form_html.erb
<%= form_for([micropost, @comment]) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="field">
<%= f.text_field :comment_content, place_holder: "Comment" %>
</div>
<button class="btn" type="submit">
Create
</button>
<% end %>
I called the patial _comment_form.html.erb from _micropost.html.erb class
<%= render 'shared/comment_form', micropost: micropost %>
I also put comment as nested resource in route.rb
resources :microposts do
resources :comments
end
How to resolve the error? Thanks!
回答1:
Did you create the corresponding migrations for Comment a ran it? The error says that it's trying to access a method that don't exist. That means that you write wrong the name of the field or that you did not run the migrations that adds that field to your model. Could you copy the section of comments table from schema.rb?
回答2:
try this in your micropost.rb
write
class Micropost < ActiveRecord::Base
...
has_many :comments, dependent: :destroy
accepts_nested_attributes_for :comments
attr_accessible :comments_attributes
...
end
and in your _comment_form.html.erb
<%= form_for @micropost do |f| %>
<%= f.fields_for :comments do |comment| %>
...
<div class="field>
<%= comment.text_field :comment_content, place_holder: "Comment" %>
</div>
...
<% end %>
<%= f.submit%>
<% end %>
来源:https://stackoverflow.com/questions/12985940/form-for-undefined-method-name