ActiveRecord .select (): возможно очистить старые выборки? - PullRequest
24 голосов
/ 11 февраля 2011

Есть ли способ очистить старые выборки в операторе .select ("table.col1, ...")?

Фон:

У меня есть область, которая запрашивает доступные элементыдля данного идентификатора пользователя (упрощенно)

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

Тогда, например, в действии index мне нужны только идентификатор элемента и заголовок, поэтому я бы сделал это:

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

Однако,это выберет столбцы "items. , items.id, items.title".Я хотел бы избежать удаления выбора из области, так как тогда я должен был бы добавить выбор ("items. ") повсюду.Правильно ли я предполагаю, что нет способа сделать это, и я либо вынужден извлекать слишком много полей, либо мне приходится использовать несколько областей?

1 Ответ

49 голосов
/ 11 февраля 2011

К счастью, вы не правы: D, вы можете использовать метод #except, чтобы удалить некоторые части запроса, выполненного отношением, поэтому, если вы хотите удалить часть SELECT, просто выполните:

@items = Item.accessible(@auth.id).except(:select).select("polls.id, polls.title")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...