特定の属性ではなく、オブジェクトに関連するエラーにはerrors.add_to_baseを使用する必要があることを読みました。これが何を意味するかを概念化するのに苦労しています。誰かが私がそれぞれを使いたいときの例を提供できますか?
たとえば、私にはバンドモデルがあり、各バンドにはジャンルがあります。ジャンルの存在を検証するときに、ジャンルが見つからない場合、エラーをベースに追加する必要がありますか?
例が多いほど良い
ありがとうございました!
ジャンルが欠落していると、フィールドエラーになります。基本エラーは、既存のレコードの完全な複製のようなもので、問題は特定のフィールドではなく、レコード全体(または少なくともフィールドの組み合わせ)に関連していました。
これは廃止予定であることに注意する価値があります(これは検索エンジンに表示されるためです)。 Rails 3つの方法:
errors[:base] << "Error message"
または
errors.add(:base, "Error message")
http://apidock.com/Rails/ActiveRecord/Errors/add_to_base
http://apidock.com/Rails/v3.2.8/ActiveModel/Errors/add
この例では、フィールド検証を確認できます(チームを選択する必要があります)。また、クラス/ベースレベルの検証を確認できます。たとえば、少なくとも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