当我使用form_for :model
时,我提交表单时会保存数据。
但是,当我使用form_tag
时,处理表单后数据会丢失。
我需要使用form_tag
,因为我有一种形式的两个模型。
有没有办法用form_tag
保存表单数据?
答案 0 :(得分: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
定义关系。由于您没有向我们提供有关您的模型的任何信息,我将为您提供一个简单的例子:
<% 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 %>
这告诉ActiveRecord Person模型可以接受Address的属性,并将属性传递给要创建的正确模型。
fields_for
从p
表单构建器链接{{1}}帮助程序,让帮助程序以正确的格式生成属性。
更多信息:Nested Model Forms
答案 1 :(得分:3)
与以前几乎一样,除了你需要建立参数。您可以查看日志以了解params的发送方式。
例如
def create
@silly_hat = SillyHat.new( :name => params[:name], :size => params[:size], :colour => params[:colour] )
if @silly_hat.save
...