0

这是我的照片模型类的代码:

class Photo < ActiveRecord::Base

  belongs_to :user
  belongs_to :organization

  validate :user_id_or_organization_id_cant_be_blank

...

  def user_id_or_organization_id_cant_be_blank
      if !:user_id? and !:organization_id?
        errors.add(:user_id, "no user")
        errors.add(:organisation_id, "no organization")
      end
  end

问题在于验证。它不起作用,我不明白为什么。

我可以创建一张没有 user_id 或 organization_id 的照片,这是不应该发生的。

请向我解释我做错了什么?

4

2 回答 2

1

你宁愿这样做:

def user_id_or_organization_id_cant_be_blank
  if user_id.blank? && organization_id.blank?
    errors.add(:user_id, "no user")
    errors.add(:organisation_id, "no organization")
  end
end
于 2012-09-15T12:38:00.040 回答
1

Rails 提供了检查存在性的标准方法:

validates :user_id, :organization_id,  presence:   true

如果您需要进行复杂的验证,请尝试使用ActiveModel::Validator

class Photo < ActiveRecord::Base
  validates_with UserOrganizationIdsValidator
end

class UserOrganizationIdsValidator < ActiveModel::Validator
  def validate(record)
    if user_id.blank? && organisation_id.blank?
       errors.add(:user_id, "no user")
       errors.add(:organisation_id, "no organization")
    end
    # something custom else...
  end
end
于 2012-09-15T13:13:25.150 回答