1

User.delete_at を使用して、アプリでユーザーの論理的な削除を有効にするために取り組んでいます。そのフィールドが設定されている場合、削除されたユーザーがアプリ全体に返されることは望ましくありません。したがって、次のモデルがある場合、次のようにセットアップします。

User.rb
    has_many :groups, :through => :group_members, :conditions => ['banned = ?', false]
    default_scope :conditions => 'users.deleted_at IS NULL'

Group.rb
    belongs_to :user
    has_many :group_members, :dependent => :destroy, :include => :user, :conditions => ['banned = ?', false]

GroupMember.rb
    belongs_to :group
    belongs_to :user
    default_scope joins(:user).where('users.deleted_at IS NULL')

次に問題は、私が実行したときです:

current_user.groups

次のエラーが表示されます。

    Group Load (0.5ms)  SELECT "groups".* FROM "groups" INNER JOIN "group_members" ON "groups"."id" = "group_members"."group_id" WHERE "group_members"."user_id" = 1 AND (users.deleted_at IS NULL) AND (banned = 'f')
PG::Error: ERROR:  missing FROM-clause entry for table "users"
LINE 1: ..."group_id" WHERE "group_members"."user_id" = 1 AND (users.dele...

User.delete_at ユーザーがアプリ全体で返されないようにするためのより良い方法はありますか? ありがとう

4

1 に答える 1

0

私はあなたの

.where('users.deleted_at IS NULL')

条件はhas_many、グループモデル内の条件にある必要があります。

于 2012-09-24T19:00:30.920 に答える