Rails:发布后如何保存表单数据

时间:2010-11-28 08:41:16

标签: ruby-on-rails

当我使用form_for :model时,我提交表单时会保存数据。

但是,当我使用form_tag时,处理表单后数据会丢失。

我需要使用form_tag,因为我有一种形式的两个模型。

有没有办法用form_tag保存表单数据?

2 个答案:

答案 0 :(得分:4)

您在问题中做出了两个不正确的假设。首先,对于多模型表单,form_tag不是必需的,甚至不推荐使用form_tag;其次,form_forfields_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
    ...