我使用的是rails 2.3.5。我有一个博客模型,博客有很多评论。这是我的博客控制器show action
def show
@blog = Blog.find(params[:id])
@comment = Comment.new
end我将显示博客,并在最后将有一个创建评论的选项。所以我在blogs/show.html.erb中添加了这个。
<% form_remote_for @comment do |f| %>
<%= f.label :content %>
<%= f.text_area :content, :rows => 6 %>
<%= f.hidden_field :blog => @blog %>
<%= f.submit %>
<% end %> 但是当我在Blogs#show中运行这个NoMethodError时,我得到了以下错误
显示app/views/blogs/show.html.erb,第270行出现的位置:
undefined method `blog#<Blog:0xb677d8d0>' for #<Comment:0xb67762b0>提取的源代码(在第270行附近):
发布于 2011-08-23 17:03:05
你必须隐藏博客的id,而不是博客对象。
<%= f.hidden_field :blog_id%>发布于 2011-08-23 17:00:47
Comment型号应具有belongs_to :blog
Blog型号应具有has_many :comments
在控制器中初始化注释,如下所示:
@blog.comments.new视图应如下所示:
<%= f.hidden_field :blog_id %>发布于 2011-08-23 17:09:17
问题出在您的f.hidden_field线路。第一个参数应该是您希望在字段中出现的散列的属性名称,但在您的代码中它是一个@comment。
我建议调整show操作以设置@comment = @blog.comments.build,并将视图更改为读取f.hidden_field :blog_id。
https://stackoverflow.com/questions/7158470
复制相似问题