Создание форм для реляционных данных в Rails
-
22-07-2019 - |
Вопрос
У меня есть форма, которую нужно отобразить для таблицы, которая связана с несколькими другими таблицами. Например, у меня есть таблица «случаев» (думаю, дело следователя), у которого есть заявитель has_one и клиент has_one. Р>
Я хотел бы, чтобы в форме отображались поля, которые необходимо заполнить для данных случая, данных клиента и данных заявителя. Есть ли простой способ сделать это так, чтобы при его отправке это было бы так просто:
case = Case.new(params[:case])
case.save
Как было бы, если бы я просто отправлял и сохранял форму только для данных дела? Р>
Решение
Похоже, вы ищете метод activerecord accepts_nested_attributes_for
. Вам нужно будет создать свою форму, используя
- form.fields_for :claimant do |claimant_form|
= claimant_form.text_field :name
Вы можете найти гораздо больше информации в Сообщение в блоге Райана Дейгла
Другие советы
Я не верю, что есть способ, которым вы можете просто вызвать case.save, и это сработает.
Чтобы создать форму, изучите использование fields_for. http://api.rubyonrails.org/classes/ActionView/Helpers/ FormHelper.html # M001605
fields_for позволяет вам добавлять поля, которые хранятся в разных переменных POST, поэтому, если вы правильно настроите поля, то в вашем новом методе вы можете сделать что-то вроде этого:
claimant = Claimant.new(params[:claimant])
claimant.save
Что не намного сложнее.
См. мои примеры сложных форм о создании вложенных мульти Модельные формы. Это было обновлено для работы с Rails 2.3 accepts_nested_attributes_for
.
Это позволяет вам вкладывать ассоциации в params [: case]
так, как вы хотите. Когда вы вызываете case.save
, все остальное тоже будет сохранено.