認証済みと未認証の2種類のユーザーを持つレールアプリがあります(データベース内のemail_authenticated:booleanで区切られています)。ユーザーを作成するときは認証されないようにしたいのですが、機能を実行するたびに、デフォルトで認証済みリストに対してそれを実行したいと考えています。最初に default_scope を指定してこれを実行しようとしましたが、これによりレコードの保存方法が変更され、デフォルトが上書きされることがわかりました (たとえば、例ではデフォルトが false ではなく true に変わります)。
# email_authenticated :boolean default(FALSE), not null
class User < ActiveRecord::Base
default_scope { where(email_authenticated: true) }
scope :authenticated, ->{ where(email_authenticated: true) }
scope :unauthenticated, ->{unscoped.where(email_authenticated: false)}
end
スコープを検索にのみ適用する方法、または私が目指していることを達成するためのよりスマートな方法について誰かが提案していますか? デフォルトのスコープを削除する場合、検索するたびに User.authenticated を呼び出す必要はありません。同様に、保存するたびに User.unauthenticated を呼び出したくありません。