0

Photo モデル クラスのコードは次のとおりです。

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

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 に答える
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 に答える