Вложенные атрибуты «один ко многим» в рельсах - PullRequest
0 голосов
/ 02 марта 2011

Это не вопрос, но, надеюсь, кто-то может извлечь из этого пользу.

Когда вы пытаетесь создать или изменить вложенную связь «один ко многим», убедитесь, что вы передаете массив. Если вы получаете

NoMethodError (неопределенный метод `[] 'для ...

и вы работаете с вложенной ассоциацией один-ко-многим, это может быть вашей проблемой. Я не нашел объяснения этому при поиске этой ошибки, так что, возможно, это поможет ускорить чью-либо разработку.

Например, у меня есть модель Person с

has_many :person_images
accepts_nested_attributes_for :person_images

Чтобы создать нового человека и связанное с ним person_image, я делаю следующее.

@person = Person.create(:full_name=>@person_name, :person_images_attributes=>[{:image=>person_image}])

Обратите внимание на [] вокруг {: image => person_image}. Если у вас есть один ко многим, вы должны иметь это. Таким образом, следующее не работает и приводит к ошибке неопределенного метода '[]'.

@person = Person.create(:full_name=>@person_name, :person_images_attributes=>{:image=>person_image})

Кроме того, по моему мнению, я должен назвать свои входные данные следующим образом

<input type="file" name="person[person_images_attributes][0][image]">

Без [0] не работает.

Я новичок в Rails. Я надеюсь, что это поможет другим новичкам, и если у кого-то есть лучшее объяснение или более эффективный способ сделать это, я был бы благодарен за ваши комментарии.

Подробнее см. Rails API для вложенных атрибутов

1 Ответ

0 голосов
/ 02 марта 2011

Используйте formtastic для создания форм, он будет обрабатывать те [0] вещи, о которых вы пишете.

Смотрите здесь:

http://railscasts.com/episodes/184-formtastic-part-1 http://railscasts.com/episodes/185-formtastic-part-2

И еслиВы новичок в RoR, это действительно хорошие сайты, на которых можно поучиться.

http://railscasts.com http://guides.rubyonrails.org/

Кстати, мне кажется, что у вас есть небольшие искривленные отношения в модели Person.Вы вероятно использовали

has_many :person_images

Но вы используете [0], чтобы получить первый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...