2010-11-28 3 views
0

Когда я использую form_for :model, данные сохраняются при отправке формы.Рельсы: как сохранить данные формы после публикации

Однако, когда я использую form_tag, данные теряются после обработки формы.

Мне нужно использовать form_tag, потому что у меня есть две модели в одном виде.

Есть ли способ сохранить данные формы с помощью form_tag?

ответ

4

Вы делаете два неправильных предположения в своем вопросе. Во-первых, form_tag не требуется или даже рекомендуется для многомодельных форм; Во-вторых, form_tag не делает ничего принципиально отличного от form_for, вы, скорее всего, не правильно форматируете имена полей для своего контроллера.

Чтобы создать форму с вложенными моделями, вам необходимо использовать вспомогательный помощник fields_for вместе с form_for. Связь должна быть определена сначала в модели с accepts_nested_attributes_for. Так как вы не дали нам никакой информации о своих моделях, я дам вам выдуманный пример:

class Person < ActiveRecord::Base 
    has_one :address 
    accepts_nested_attributes_for :address 
end 

class Address < ActiveRecord::Base 
    belongs_to :person 
end 

Это говорит ActiveRecord, что модель Человек может принять атрибуты для адреса, и будет проходить вдоль атрибутов в правильная модель для создания.

<% form_for :person do |p| %> 
    <% p.fields_for :address do |a| %> 
    use the a form builder to create 
    fields for the address model here 
    <% end %> 
<% end %> 

заковав fields_for помощника из p формы строителя позволяет помощникам генерировать атрибуты в правильном формате.

Дополнительная информация: Nested Model Forms

+0

Благодарим вас за этот подробный ответ. Я многому научился, и все исправил. – Alex 2010-11-28 10:38:51

3

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

например.

def create 
    @silly_hat = SillyHat.new(:name => params[:name], :size => params[:size], :colour => params[:colour]) 
    if @silly_hat.save 
    ... 
+0

Так как же моя форма выглядит? Я использую password_field_tag: пароль, и он не работает. – Alex 2010-11-28 09:11:10

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