Rails 3嵌套资源变量

问题描述:

我有几个与我创建的Transaction对象有关的问题。Rails 3嵌套资源变量

交易belongs_to贷款和贷款has_many交易。

因此,我建立一个嵌套的路线:

resources :loans do 
    resources :transactions 
end 

我的问题是:我如何通过贷款价值为交易的“loan_id”字段?这是否最好在控制器中完成或作为表单中的隐藏字段?嵌套的路线是否创建了一个简单的方法来获取这个变量?

我认为这将会自动完成,但是当我按原样保存时该字段为空。

任何帮助将不胜感激!

如果你调用一个特定的事务,对于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存在,我通过'lend_button'%>是否正确?由于某些原因,它仍然会抛出错误。感谢您的帮助! – Justin 2011-05-18 21:33:35

考虑将一个before_filter添加到您的控件并让它调用一个私有方法来跨所有操作获取:id。把这个在您的transactions控制器的顶部:

before_filter :load_loan 
所有动作后

,然后补充:

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

使用它像这样在你的new行动:

@transaction = @loan.transactions.build