0xS*_*ina 18 ruby activerecord ruby-on-rails
有没有一种方法可以指定在ActiveRecord中选择所有列,只有少数几个.例如,对于用户,我不想选择他们的密码哈希或他们的电子邮件.这是可能的还是我必须手动硬编码所有列?
谢谢
Mar*_*sen 19
写一个范围就好
def select_without columns
  select(column_names - columns.map(&:to_s))
end
像这样的东西?
exclude_columns = ['password', 'email']
columns = User.attribute_names.delete_if(|x| exclude_columns.include?(x))
User.select(columns)
编辑
我忘了我们可以做Array1 - Array2
最好的答案:
exclude_columns = ['password', 'email']
columns = User.attribute_names - exclude_columns
User.select(columns)
Another really usefull way it's with a scope inside the model in case you need to avoid a column constantly.
In my case I save images into blob fields so I want to avoid those to be loaded everytime and in a easy way:
scope :select_exclude_image, ->  { select( Movie.attribute_names - ['image'] ) }
Then to avoid the image in the selection you can do something like that:
Movie.select_exclude_image.first
or
Movie.select_exclude_image.all
I hope it will help!
| 归档时间: | 
 | 
| 查看次数: | 10163 次 | 
| 最近记录: |