创建记录时出错:nil对象而不是数组?

时间:2011-01-31 01:56:38

标签: ruby-on-rails model record nested-attributes

我有一个Topic,其中包含许多Posts,并为它们接受嵌套属性。当我创建主题时,它也会创建第一个帖子。

Topics#create被调用时,我在尝试评估NoMethodError时得到nil.[]=,而我无法弄清楚导致它的原因。

创建方法:

@forum = Forum.find params[:forum_id]
params[:topic][:post_attributes][:member_id] = current_member.id
@topic = @forum.topics.create params[:topic]
respond_with @topic, location: topic_url(@topic)

我的新主题表单:

- @topic.posts.build
= form_for @topic do |topic_form|
  = topic_form.label :title
  = topic_form.text_field :title
  = topic_form.fields_for :posts do |post_fields|
    = post_fields.label :content
    = post_fields.text_area :content

对于什么是错误的任何想法?

2 个答案:

答案 0 :(得分:2)

我的猜测是它在这一行:

params[:topic][:post_attributes][:member_id] = current_member.id

您应该将其更新为:

params[:topic][:post_attributes][0][:member_id] = current_member.id

params[:topic][:post_attributes].first[:member_id] = current_member.id

由于您使用的是has_many关联,因此可能会有多个帖子与主题一起提交,因此post_attributes的params实际上是一个数组。

答案 1 :(得分:1)

这是一个有很多关联邮政?
也许你应该尝试:

params[:topic][:posts_attributes][0][:member_id] = current_member.id