2013-03-20 100 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