我如何在嵌套路由,DRY风格的上下文中查询活动记录模型



我希望我的控制器使用请求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])

最新更新