ActiveRecord选择除列之外

有没有一种方法可以指定在ActiveRecord中选择所有列,只有少数几个。 例如,对于用户,我不想选择他们的密码哈希或他们的电子邮件。 这是可能的还是我必须手动硬编码所有列?

谢谢

写一个范围就好

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) 

另一个非常有用的方法是在模型中使用范围,以防您不断地避免使用列。

在我的情况下,我将图像保存到blob字段中,所以我想避免每次都以一种简单的方式加载它们:

 scope :select_exclude_image, -> { select( Movie.attribute_names - ['image'] ) } 

然后,要避免选择中的图像,您可以执行以下操作:

 Movie.select_exclude_image.first 

要么

 Movie.select_exclude_image.all 

我希望它会有所帮助!