2

我在 Rails 4 中定义了多对一的关系:

class Event < ActiveRecord::Base
  belongs_to :user
end

:user如果已设置,如何检查密钥是否存在?

以下正确检查密钥是否存在但不允许 `nil? 价值观:

  validates :user, presence: true

以下允许任何值,甚至是不存在的 ID:

  validates :user, presence: true, allow_nil: true

您如何进行此类验证。

4

3 回答 3

1

刚遇到这个问题,这里有2个解决方案

1.

validates :user, presence: true, if: 'user_id.present?'

2.

. https://github.com/perfectline/validates_existence宝石

可以这样使用

validates : user, existence: { allow_nil: true, both: false }

both选项用于错误消息:false将显示 1 个错误(仅关联),true将显示 2 个错误(关联和外键)

于 2014-09-07T17:52:23.957 回答
1

如果提供了用户,您可以使用 before_save 回调来检查用户是否有效:

class Event < ActiveRecord::Base
  belongs_to :user    

  before_save: :validate_user unless: Proc.new { |event| event.user.nil? }

  private
    def validate_user
      if User.where(id: user_id).empty?
        errors[:user] << "must be valid"
      end
    end

end
于 2013-09-12T23:06:47.870 回答
1

您必须保留存在验证Event并添加User模型:

has_many :events, inverse_of: :user
于 2013-09-14T14:22:52.533 回答