2011-02-11 41 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