Ошибка при создании записи: нулевой объект вместо массива? - PullRequest
2 голосов
/ 31 января 2011

У меня есть 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 ]

2 голосов
/ 31 января 2011

Я думаю, что это в этой строке:

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 на самом деле являются массивом.

1 голос
/ 31 января 2011

У него много ассоциаций для Почты?
Может быть, вам стоит попробовать:

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