【问题标题】:Rails hide Model field by default to every queryRails 默认对每个查询隐藏模型字段
【发布时间】:2026-01-01 04:25:02
【问题描述】:

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

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

但是我必须在每次查询时都写这个,我怎样才能将它设置为默认行为。

【问题讨论】:

    标签: ruby-on-rails activerecord rails-models


    【解决方案1】:

    您可以使用默认范围

    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

    【讨论】:

    • 有效,谢谢,我只需要这样写:default_scope { select(*User.attribute_names.reject { |attr| attr == 'password_digest' }) }