在为嵌套对象创建隐藏字段时出错

时间:2011-08-23 08:56:23

标签: ruby-on-rails

我正在使用rails 2.3.5。我有一个博客模型和博客有很多评论。这是我的Blog控制器显示操作

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 %>    

但是当我运行它时,我得到以下错误 博客中的NoMethodError#show

显示app#views / blogs / show.html.erb,其中第270行引发:

undefined method `blog#<Blog:0xb677d8d0>' for #<Comment:0xb67762b0>

提取的来源(第270行):

3 个答案:

答案 0 :(得分:2)

Comment模型应该有belongs_to :blog

Blog模型应该有has_many :comments

在控制器中初始化注释,如下所示:

@blog.comments.new

视图应该是这样的:

<%= f.hidden_field :blog_id %>

答案 1 :(得分:1)

你必须隐藏博客的id而不是博客对象。

<%= f.hidden_field :blog_id%>

答案 2 :(得分:0)

问题在于您的f.hidden_field行。第一个参数应该是字段中所需的@comment的属性名称,但在您的代码中它是一个哈希。

我建议您调整show操作以设置@comment = @blog.comments.build,并将视图更改为f.hidden_field :blog_id