私はコーディングが初めてで、この回答にコメントするのに十分な評判がありません: Rails 3: ネストされたフィールドの一意性検証
だから私はこの質問を「パート2」として作成しています:)
私はWebデザイナーですが、コーディングを学ぶことに興味があり、これを私の時代から保持しています。
# app/validators/nested_attributes_uniqueness_validator.rb
class NestedAttributesUniquenessValidator < ActiveModel::EachValidator
record.errors[attribute] << "Products names must be unique" unless value.map(&:name).uniq.size == value.size
end
end
「ActiveModel::EachValidator」を使用した上記のコードは、次のエラーをスローします。
""Area 1" の未定義のメソッド `map':String"
# app/validators/nested_attributes_uniqueness_validator.rb
class NestedAttributesUniquenessValidator < ActiveModel::Validator
record.errors[attribute] << "Products names must be unique" unless value.map(&:name).uniq.size == value.size
end
end
「ActiveModel::Validator」を使用した上記のコードは、次のエラーをスローします。
"サブクラスは、validate(record) メソッドを実装する必要があります。"
これはモデルファイルです:
class Area < ActiveRecord::Base
validates :name,
:presence => true,
:uniqueness => {:scope => :city_id},
:nested_attributes_uniqueness => {:field => :name}
belongs_to :city
end
ここで完全なコードを見つけることができます: https://github.com/syed-haroon/rose