2010-11-28 57 views
0

当我使用form_for :model时,我提交表单时会保存数据。Rails:如何在发布后保存表单数据

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

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

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

回答

4

你在你的问题中做了两个不正确的假设。首先,form_tag不是必要的,甚至不建议用于多模型表单;其次,form_tagform_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 %> 

链从p表单生成的fields_for帮手让助手生成正确的格式属性。

更多信息: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