2013-07-02 2 views
14

Есть ли способ, который я могу указать, чтобы выбрать ВСЕ столбцы в ActiveRecord, за исключением нескольких. Например, для Пользователя я не хочу выбирать свой хэш пароля или их электронную почту. Возможно ли это, или мне приходится вручную жестко кодировать все столбцы?ActiveRecord select except columns

Thanks

ответ

16

написать сферу как

def select_without columns 
    select(column_names - columns.map(&:to_s)) 
end 
+5

Я бы сделал 'def select_without * columns', чтобы вы могли принимать любое количество аргументов – kenn

+0

. Хорошая точка –

+0

Существует проблема с этим методом:' COUNT' здесь не работает. Итак, 'Model.select ([: a,: b]). Count' выдает ошибку –

8

Что-то вроде этого?

exclude_columns = ['password', 'email'] 
columns = User.attribute_names.delete_if(|x| exclude_columns.include?(x)) 

User.select(columns) 

EDIT

Я забыл, что мы можем сделать Array1 - array2

Лучший ответ:

exclude_columns = ['password', 'email'] 
columns = User.attribute_names - exclude_columns 

User.select(columns)