2011-02-11 40 views
18

有没有办法清除.select(“table.col1,...”)语句中的旧选择?ActiveRecord .select():可以清除旧的选择?

背景:

我已经请求访问的项目给定用户ID的范围(简体)

scope :accessible, lambda { |user_id| 
    joins(:users).select("items.*") 
    .where("items_users.user_id = ?) OR items.created_by = ?", user_id, user_id) 
} 

然后,例如,在索引操作我只需要项目ID和标题,所以我这样做:

@items = Item.accessible(@auth.id).select("polls.id, polls.title") 

然而,这将选择列 “项目,items.id,items.title。”我想避免从范围中删除选择,因为那样我就不得不在其他地方添加一个select(“items。”)。我是否有理由认为没有办法做到这一点,我要么活着拿太多的领域,要么必须使用多个范围?

回答

42

幸运的你就错了:d,则可以使用#except方法来删除的关系中进行的查询的某些部分,所以如果你想删除的SELECT部分​​只是做:

@items = Item.accessible(@auth.id).except(:select).select("polls.id, polls.title") 
+0

欢呼声,你只是让我爱上了更多:D – mkon 2011-02-12 17:46:10