Rails: отправка формы с несколькими объектами - PullRequest
4 голосов
/ 07 января 2009

Я создаю приложение Rails, и я наткнулся на небольшую загадку. Мне нужна форма «Создать новую запись для DataType1», которая не только создает новую строку для DataType1, но также вставляет до четырех новых строк для DataType2.

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

Вот упрощенная база данных:

create_table :data_type_1 do |t|
  t.string     :title
  t.text       :body

  t.timestamps
end

create_table :data_type_2 do |t|
  t.belongs_to :parent

  t.timestamps
end

Теперь у меня все отношения установлены и все; это не проблема. Проблема в том, что я просто не могу понять, как передать параметры для DataType2s вместе с параметрами для нового DataType1. Когда кто-то покажет мне, как мне следует поступить, я могу настроить новый DataType2, чтобы он довольно легко связывался с новым DataType1.

Вот что у меня есть для формы на данный момент:

<% form_for(@data_type_1) do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </p>

  # Etc...

  <p>
    # New items need to be iterated here
    # DataType2[1]: [         ]
    # DataType2[2]: [         ]
    # DataType2[3]: [         ]
    # DataType2[4]: [         ]
    # (Note that these numbers are just examples.)
  </p>

  <p>
    <%= f.submit "Create" %>
  </p>
<% end %>

Я относительно новичок в Rails, и я прошу прощения, если этот вопрос немного болтается.

1 Ответ

13 голосов
/ 07 января 2009

Этот RailsCast говорит о вставке списков «DataType2» в «DataType1». Интересные части это

app/views/projects/_form.html.erb

  <% for task in @project.tasks %>
    <% fields_for "project[task_attributes][]", task do |task_form| %>
      <p>
        Task: <%= task_form.text_field :name %>
      </p>
    <% end %>
  <% end %>

app/models/project.rb

def task_attributes=(task_attributes)
  task_attributes.each do |attributes|
    tasks.build(attributes)
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...