我在Rails 4中定义了多对一关系:
class Event < ActiveRecord::Base
belongs_to :user
end
如果设置了:user
密钥,我该如何检查?
以下正确检查,密钥存在但不允许“nil”?价值观:
validates :user, presence: true
以下内容允许任何值,甚至是不存在的ID:
validates :user, presence: true, allow_nil: true
你如何进行这种验证。
答案 0 :(得分: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
答案 1 :(得分:1)
您必须在Event
中保留状态验证并添加User
模型:
has_many :events, inverse_of: :user
答案 2 :(得分:0)
刚遇到这个问题,这里有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个错误(关联和外键)