Rails 默认情况下对每个查询隐藏模型字段

Rails hide Model field by default to every query

我有用户 table,它有一个字段 password_digest,我正在使用 API,我想应用这个:

Users.all.select(*User.attribute_names.reject { |attr| attr == 'password_digest' })

但我必须在我执行的每个查询中都写这个,我如何将其设置为默认行为。

您可以使用默认范围

class User < ActiveRecord::Base
  default_scope select(*User.attribute_names.reject { |attr| attr == 'password_digest' })
end

另一种方式:

class User < ActiveRecord::Base
  default_scope select(User.column_names - ["password_digest"])
end

参考:
https://apidock.com/rails/ActiveRecord/Base/default_scope/class