嵌套时从URL获取ID而不是嵌套

时间:2012-10-11 22:22:32

标签: ruby-on-rails url parameters nested

我有一个客户端模型,并嵌套在其中,我有一个程序模型。例如:

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

在我的ApplicationController类中,我希望能够在before_filter中加载Client模型对象。我尝试这样做:

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

这适用于嵌套资源(localhost:3000 / clients / 2 / programs / 5),但它不适用于客户端领域(localhost:3000 / clients / 2)。如果我这样做:

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

相反 - 它在客户端领域(localhost:3000 / clients / 2)中工作,但不在嵌套资源(localhost:3000 / clients / 2 / programs / 5)中工作。

是否有适合两者的方法?

1 个答案:

答案 0 :(得分:2)

你可以这样做:

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

因此,如果一个为零,那么另一个将作为id输入。

按顺序排列它们意味着如果有:client_id,它将始终抓住它。

但危险的项目是链接末尾的id被称为:id,所以如果你想要识别记录,可能会有一些混乱。请保持警惕。