2011-05-18 109 views
1

我有幾個與我創建的Transaction對象有關的問題。Rails 3嵌套資源變量

交易belongs_to貸款和貸款has_many交易。

因此,我建立一個嵌套的路線:

resources :loans do 
    resources :transactions 
end 

我的問題是:我如何通過貸款價值爲交易的「loan_id」字段?這是否最好在控制器中完成或作爲表單中的隱藏字段?嵌套的路線是否創建了一個簡單的方法來獲取這個變量?

我認爲這將會自動完成,但是當我按原樣保存時該字段爲空。

任何幫助將不勝感激!

回答

2

如果你調用一個特定的事務,對於new交易的路線將是

loans/:loan_id/transactions/new 

你可以使用模型關聯是這樣的:在您的create行動:

@transaction = Loan.find(params[:loan_id]).transactions.build 

這樣新@transaction將已經填充loan_id

+0

我只是試過這個,我得到以下消息:無法找到沒有ID的貸款。你爲什麼:loan_id沒有被識別? – Justin 2011-05-18 21:15:57

+0

確保您在貸款數據庫中使用您試圖撥打的loan_id。如果貸款的id = loan_id不存在 - 只有在您手動輸入url時纔會發生 – 2011-05-18 21:19:12

+0

Loan存在,我通過<%= link_to'Lend Now'鏈接到它, ,new_loan_transaction_path(@loan),:class =>'lend_button'%>是否正確?由於某些原因,它仍然會拋出錯誤。感謝您的幫助! – Justin 2011-05-18 21:33:35

0

考慮將一個before_filter添加到您的控件並讓它調用一個私有方法來跨所有操作獲取:id。把這個在您的transactions控制器的頂部:

before_filter :load_loan 
所有動作後

,然後補充:

private 
def load_loan 
    @loan.find(params[:loan_id]) 
end 

使用它像這樣在你的new行動:

@transaction = @loan.transactions.build