2013-03-20 66 views
0

我在我的rails3.2应用程序中有一个表单,用于投诉,它也同时构建一个新的公司和分支。这一切都可以正常工作,但我想将公司的ID作为外键company_id存储在分支表中。与导轨嵌套的表格

这是我投诉的控制器:

def new 
    @complaint = Complaint.new 
    @complaint.build_company 
    @complaint.build_branch(:company_id => '#Trying to set the company ID here') 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @complaint } 
    end 
    end 

我可以把:company_id =>后分配上面创建的对象的ID?

+0

我需要某种形式的'after_create'行动做到这一点? – pjmil 2013-03-20 08:02:10

+0

你看过使用accept_nested_attributes_for和嵌套窗体吗? – 2013-03-21 03:40:03

回答

0

难道不是这样吗?

@complaint.build_branch(:company_id => @complaint.company_id) 
+0

这是行不通的,因为'@ complaint.company'是一个新的记录,它也建立在相同的请求上。 – jvnill 2013-03-20 03:17:30

+0

这不起作用,它仍然只是存储一个NULL值。 – pjmil 2013-03-20 03:21:37

+0

您无法使用未保存实例上的内部版本来设置外键。它会在保存时被覆盖。 – 2013-03-20 03:37:49

0

该问题似乎是由于未保存的公司对象&投诉对象。您没有概述模型的详细信息,但我想,

@complaint = Compplaint.create(#Whatever parameters are required) 
company = @complaint.companies.create() #Assuming has_many relationship 
@complaint.branches.create(:comapny_id => company.id) 

创建保存记录并生成id,其中build和new没有。

你还应该在你的模型中探索has_many:through。

0

的解决方案是将下面的代码添加到创建行动

def create 
... 
@complaint.branch.company = @complaint.company 
@complaint.save 
... 
end