2009-08-05 2 views
0

У меня есть форма, которую мне нужно отобразить для таблицы, которая имеет отношение к нескольким другим таблицам. Например, у меня есть таблица «случаи» (думаю, случай следователя), у которой есть ист и единственный клиент.Создание форм для реляционных данных в Rails

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

case = Case.new(params[:case]) 
case.save 

Как было бы, если бы я только представление и сохранение формы только для данных случаев?

ответ

0

Похоже, что вы ищете метод activerecord accepts_nested_attributes_for. Вам нужно будет обработать вашу форму, используя

- form.fields_for :claimant do |claimant_form| 
    = claimant_form.text_field :name 

Вы можете найти гораздо больше информации в Ryan Daigle's blog post

+0

Именно то, что я искал! Спасибо! – intargc

0

Я не верю, что есть способ, которым вы можете просто позвонить в case.save, и это сработает.

Чтобы создать форму, используйте поля fields_for. http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#M001605

fields_for позволяет добавлять поля, которые хранятся в различных переменных POST, так что если вы устанавливаете поля правильно, то в новом методе вы могли бы потенциально сделать что-то вроде этого:

claimant = Claimant.new(params[:claimant]) 
claimant.save 

Что ISN» t ужасно сложнее.

+0

Ну, я знаю, что вы можете заполнить весь реляционный объект следующим образом: случая = Case.new case.claimant = Claimant.new # Заполните дела и данные претендента case.save И сохранит материал дела и истца в db правильно ... Я просто не был уверен, что вы можете сделать это с помощью материалов params из формы. Наверное, нет. Спасибо! – intargc

0

Смотрите мой complex-form-examples на создание вложенных нескольких типовых форм. Это было обновлено для работы с Rails 2.3's accepts_nested_attributes_for.

Это позволяет вам встраивать ассоциации под params[:case], как вы хотите. Когда вы вызываете case.save, все остальное тоже будет сохранено.

Смежные вопросы