Rails:在before_create之后调用验证

nul*_*ull 1 validation ruby-on-rails callback

据我所知,验证假设在回调之前运行.不过,我的行为表明不然.具体来说,我有:

class User::GroupInvitation < ActiveRecord::Base

  validate :user_can_be_invited

  before_create :find_or_create_membership

  private

    def user_can_be_invited
      user_membership = User::Membership.where(:group_id => self.group_id, :user_id => self.invitee_id).first
      if user_membership.present?
        case user_membership.status
        when "invited"
          errors[:base] << I18n.t("user.group_invitations.create.this_user_is_already_invited")
        end
      end
    end

    def find_or_create_membership
      user_membership = User::Membership.where(:group_id => self.group_id, :user_id => self.invitee_id).first_or_create(:status => "invited")
      user_membership.update_column(:status, "invited") unless user_membership.new_record?
      self.user_membership_id = user_membership.id
    end
end
Run Code Online (Sandbox Code Playgroud)

测试此代码时,我始终会收到错误"此用户已被邀请",即使用户之前未被邀请也是如此.我最好的猜测是,这种情况正在发生,因为find_or_create_membership它首先运行,因此设置statusinvited.关于正在发生什么或如何解决这种情况的任何想法?

Zip*_*pie 9

find_or_create_membership 正在运行

创建时的操作顺序:

before_validation
after_validation
before_save
around_save
before_create
after_create
after_save
Run Code Online (Sandbox Code Playgroud)