Подтвердить что ты не робот

ActiveRecord.select(): Можно удалить старые элементы?

Есть ли способ очистить старые варианты в выражении .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)
}

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

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

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

4b9b3361

Ответ 1

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

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