我希望我的控制器使用请求URL包含的所有id,而不使控制器路由特定。
我的路线:
...
resources :users do
resources :properties
end
...
我的控制器是标准的scaffold控制器。让我们看看index方法:
def index
properties = Properties.all
respond_to do |format|
format.json { render json: properties }
end
end
def show
@property = Property.find(params[:id])
respond_to do |format|
format.json { render json: property }
end
end
像/users/10/properties这样的路由的问题是它没有拾取10的user_id,并且没有使用它来创建查询。它查询所有属性而不是子集。
我也使得修改url来查看其他用户属性变得微不足道,只需使用"id",不需要找到匹配的"user_id"+"id",因为"user_id"被忽略了。
当然,我可以在代码中显式地表达它,但这会使它特定于路由。我也喜欢在非嵌套路由的上下文中使用控制器。
有一个标准的配方来处理吗?比如查看所有以"_id"结尾的参数?
查看https://github.com/josevalim/inherited_resources它将帮助你完成这个(以及更多)
否则,您需要在索引操作中检查查询参数是否存在,如果存在,则查询该参数(Properties)。Where (user_id: params[:user_id])