5

私はコーディングが初めてで、この回答にコメントするのに十分な評判がありません: 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

4

2 に答える 2

1

@サイード:あなたはこれをやろうとしていると思います。それ以外の場合は、私のコメントに返信してください。

# app/models/city.rb
class City < ActiveRecord::Base
  has_many :areas
  validates :areas, :area_name_uniqueness => true
end

# app/models/area.rb
class Area < ActiveRecord::Base
  validates_presence_of :name
  validates_uniqueness_of :name  
end

# config/initializers/area_name_uniqueness_validator.rb
class AreaNameUniquenessValidator < ActiveModel::Validator
  def validate_each(record, attribute, value)
    record.errors[attribute] << "Area names must be unique" unless value.map(&:name).uniq.size == value.size
  end
end
于 2012-05-22T04:27:23.130 に答える
1

ここで答えを見つけました:

https://rails.lighthouseapp.com/projects/8994/tickets/2160-nested_attributes-validates_uniqueness_of-fails

&

破棄されたネストされたモデル レールの validates_uniqueness_of

これは Rails 2 用です。ここで 1 行を変更する必要があります: add_to_baseは廃止され、3.1 では使用できません。使用するself.errors.add(:base, message)

于 2012-06-08T02:29:49.690 に答える