2013-05-06 50 views
0

我喜欢我的控制器使用请求URL包含的所有id,而不使控制器路由特定。如何查询嵌套路由中的活动记录模型,干式

我的路线:

... 
resources :users do  
    resources :properties 
end 
... 

我的控制器是标准的支架控制器。让我们看一下指数法:

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 

问题与路由像/用户/ 10 /属性是,它的10不皮卡user_ID的,而不是用它来创建查询。它查询所有属性而不是子集。

我也修改网址琐碎以查看其他用户属性,只需玩“id”,不需要找到匹配“user_id”+“id”,因为“user_id”被忽略。

当然,我可以在代码中明确表示,但这会使它具有特定的路由。我喜欢在非嵌套路由的上下文中使用控制器。

是否有标准配方来处理?像查看所有以“_id”结尾的参数?

回答

1

退房https://github.com/josevalim/inherited_resources 它会帮助你这个(以及更多)

否则,你需要在你的索引操作检查查询参数是存在的,如果是这样,对PARAM查询(Properties.where(user_id:params [:user_id])

+0

inherited_resources看起来很棒,它确实有很多,它有什么缺点吗? – 2013-05-07 00:44:37

+0

不是我遇到过的,你必须考虑你的控制器有点不同,但这是件好事 – cpuguy83 2013-05-07 01:17:57

+1

如果你喜欢,也可以查看https://github.com/plataformatec/has_scope – cpuguy83 2013-05-07 01:19:27