Как получить массив для использования с вложенными атрибутами в форме? - PullRequest
0 голосов
/ 10 января 2012

Документы описывают прохождение вложенных массивов, но никогда не дают пример того, как сами поля формы будут выглядеть

  params = { :member => {
    :name => 'joe', :posts_attributes => [
      { :title => 'Kari, the awesome Ruby documentation browser!' },
      { :title => 'The egalitarian assumption of the modern citizen' },
      { :title => '', :_destroy => '1' } # this will be ignored
    ]
  }}

Это единственный способ, которым я могу думать, чтобы это действительно сработало. Правильно ли это, и я оставлен на свои собственные устройства, чтобы придумать способ нумерации элементов массива (используя инкремент) или есть специфичный для RoR способ сделать это?

name='member[posts_attributes][0][title]' value='Kari, the awesome Ruby documentation browser!'
name='member[posts_attributes][1][title]' value='The egalitarian assumption of the modern citizen'

Как то так?

- f.fields_for "posts_attributes[#{i}]", x do |pa|

Или я далеко?

Ответы [ 2 ]

0 голосов
/ 11 января 2012

Railscasts 196 и 197 хорошо объясняют, что вам нужно.

Также обратите внимание, что в Rails 3.1 ваш f.fields_for должен начинаться с =, а не -

= f.fields_for(:posts) do |posts_form|
0 голосов
/ 10 января 2012

Rails должен позаботиться обо всем, если ваши модели правильно вложены.

Исходя из вашего примера, убедитесь, что:

Member has_many :post_attributes
Member accepts_nested_fields_for :post_attributes

А затем, на вашем действии создания,вам нужно построить количество объектов post_attribute, которые вы хотите показать:

def create
  @member = Member.new
  @member.post_attributes.build
end

Ваша форма должна содержать только:

f.fields_for :post_attributes do |post_attributes_form|
  post_attributes_form.text_field :title
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...