2012-10-11 41 views
0

我有一个客户端模型,嵌套在那里,我有一个程序模型。例如:当嵌套和不嵌套时从URL获取ID

localhost:3000/clients/2 
localhost:3000/clients/2/programs/5 

在我的ApplicationController类,我希望能够在的before_filter客户模型对象加载。我试图做这样的:

@user_client = Client.find(params[:client_id]) 

这适用于嵌套的资源(本地主机:3000 /客户/ 2 /程序/ 5),但它并不适用于客户端领域的工作(本地主机:3000 /客户/ 2 )。如果我这样做,是这样的:

@user_client = Client.find(params[:id]) 

这是相反的 - 它在客户端领域(本地主机:3000 /客户/ 2),但不嵌套资源(本地主机:3000 /客户/ 2 /程序/ 5 )。

有没有一种方法可以适用于两者?

回答

2

你能不能做这样的事情:

@user_client = Client.find(params[:client_id] || params[:id]) 

所以,如果一个是零,则另一个将被输入的ID。

让他们按照这个顺序意味着它会一直抓住它,如果有:client_id

但是,危险项目是链接末尾的ID被称为:id,因此如果您尝试识别记录,那么可能会出现一些混淆。只要保持警惕。

+0

啊,我认为可能有一些“轨道”的做法,但这是诀窍。谢谢jstim! –