2010-10-30 43 views
1

虽然部分方式通过输入新记录(孩子),这是不完整的,无法保存,我希望能够添加一条记录另一个模型(父),然后用它来完成原始记录(子)。父级拥有许多必需的属性,而不仅仅是一个字段。我想尽可能以干的方式使用每个模型的新/创建视图和验证。Rails:创建父母,使用父母自己的视图,同时创建子女记录

我见过的所有例子都显示了如何使用accept_nested_attributes_for在一个表单上输入父数据和子数据。我想以逆向方式创建一个新的孩子,然后使用父母自己的表单来添加它们,如果它们不存在的话。

如标有号码父模型

class Enquiry < ActiveRecord::Base 
    belongs_to :salesperson 
    belongs_to :customer 
    belongs_to :site 
end 

我想创建一个新的查询和选择客户和网站可能会或可能不会已经在数据库中的这种销售垂询型号。如果他们在数据库中,自动完成会发现他们,否则我需要添加一个新的客户或站点。客户不仅需要输入一个名称等单个属性。它还需要其他详细信息,如地址,联系方式等。我不想将客户表单构建到查询表单中,因为我需要从应用程序的许多其他部分添加新客户。因此,我只想使用和维护一个客户表单:customer-> new.html.erb。如果没有客户,查询不能保存,所以我需要一种方法来保留部分输入的数据。

我可以考虑的两种方法来做到这一点。

  1. 商店什么都调查数据已经部分在会话中输入,打开新的客户视图,一旦其完成重定向回查询表格,显示到目前为止,这就是数据被输入。

  2. 某些可以使用父模型的新视图并仍然保持查询表单在后台打开的Lightbox弹出窗口。

他们两个都会工作吗?如果有的话,有人能告诉我一些如何使它工作的示例代码?否则,有没有更好的方法来做到这一点?

回答

0

您可以使用相同的nested_attributes风格系统。

在您的表单中,您可以使用enquiry[customer_attributes][name]定义属性。您只需要在您的查询模型中定义此属性后

class Enquiry < AR 

    def customer_attributes=(params) 
    self.customer = Customer.create(params) 
    end 
end 

因此,如果有参数客户是创建。如果有一项查询[customer_id]不是,并且您生成关联。