accepts_nested_attributes_for и nested_form плагин - PullRequest
3 голосов
/ 04 февраля 2010

У меня следующий код в частичном _form.html.haml, он используется для новых и редактирования действий. (Кстати, я использую плагин Райана Бейтса nested_form )

.fields
    - f.fields_for :transportations do |builder|
        = builder.collection_select :person_id, @people, :id, :name, {:multiple => true}
        = builder.link_to_remove 'effacer'
    = f.link_to_add "ajouter", :transportations

отлично работает для нового действия ... для действия редактирования, как объясняется в документе, я должен добавить: id уже существующих ассоциаций, поэтому я должен добавить что-то вроде

= builder.hidden_field :id, ?the value? if ?.new_record?

Как я могу получить значение?

Вот документ Accept_nested_attributes_for для справки (источник: http://github.com/rails/rails/blob/master/activerecord/lib/active_record/nested_attributes.rb#L332)

# Assigns the given attributes to the collection association.
#
# Hashes with an <tt>:id</tt> value matching an existing associated record
# will update that record. Hashes without an <tt>:id</tt> value will build
# a new record for the association. Hashes with a matching <tt>:id</tt>
# value and a <tt>:_destroy</tt> key set to a truthy value will mark the
# matched record for destruction.
#
# For example:
#
# assign_nested_attributes_for_collection_association(:people, {
# '1' => { :id => '1', :name => 'Peter' },
# '2' => { :name => 'John' },
# '3' => { :id => '2', :_destroy => true }
# })
#
# Will update the name of the Person with ID 1, build a new associated
# person with the name `John', and mark the associatied Person with ID 2
# for destruction.
#
# Also accepts an Array of attribute hashes:
#
# assign_nested_attributes_for_collection_association(:people, [
# { :id => '1', :name => 'Peter' },
# { :name => 'John' },
# { :id => '2', :_destroy => true }
# ])

Спасибо за вашу помощь.

Ответы [ 3 ]

1 голос
/ 07 февраля 2010

Я нашел свою ошибку, вот что я выучил к вашему сведению:

Когда вы используете acceptpts_nested_attributes_for со многими ко многим ассоциациям, сохраняйте первичный ключ: id для таблицы ассоциации.

Приветствия

1 голос
/ 07 мая 2010

Шахта работает при использовании «: _delete» вместо «: _destroy». Я на рельсах 2.3.4. Рубин 1.8.7

Проверьте это: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#M001605

0 голосов
/ 05 февраля 2010

Вложенные формы официально поддерживаются Rails. То, что вы делаете (в частности, с помощью метода fields_for), может конфликтовать со встроенным в RAils способом рендеринга fields_for.

Вот документация для Rails как сделать fields_for ... это очень тщательно:

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#M001605

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

Надеюсь, это поможет!

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