ruby on rails length レール上のルビー: エラー.add_to_base 対エラー.



model validation (2)

私は、errors.add_to_baseはオブジェクトに関連付けられたエラーに使用されるべきであり、特定の属性ではないことを読んでいます。 私はこれが何を意味するのかを概念化するのに問題があります。 誰かが私がそれぞれを使いたいときの例を提供できますか?

たとえば、バンドモデルがあり、各バンドにはジャンルがあります。 ジャンルの存在を検証するときに、エラーがベースに追加されると、ジャンルが見つからない場合はどうなりますか?

より多くの例がより良い

ありがとうございました!

https://ffff65535.com



この例では、フィールドの有効性を確認することができます(チームを選択する必要があります)。 そして、あなたはクラス/ベースレベルのバリデーションを見ることができます。 たとえば、連絡先、電話番号、電子メールの少なくとも1つの方法が必要でした。

class Registrant
  include MongoMapper::Document

  # Attributes ::::::::::::::::::::::::::::::::::::::::::::::::::::::
  key :name, String, :required => true
  key :email, String
  key :phone, String

  # Associations :::::::::::::::::::::::::::::::::::::::::::::::::::::
  key :team_id, ObjectId
  belongs_to :team
...
  # Validations :::::::::::::::::::::::::::::::::::::::::::::::::::::
  validate :validate_team_selection
  validate :validate_contact_method
...

  private

  def validate_contact_method
    # one or the other must be provided
    if phone.empty? and email.empty?
      errors.add_to_base("At least one form of contact must be entered: phone or email" )
    end
  end

  def validate_team_selection
    if registration_setup.require_team_at_signup
      if team_id.nil?
        errors.add(:team, "must be selected" )
      end
    end
  end
end




model