2012-05-19 19 views
5

Ich bin neu in Codierung - und haben nicht genug Ruf diese Antwort Kommentar: Rails 3: Uniqueness validation for nested fields_forRails 3: Einmaligkeit Validierung für verschachtelte fields_for - Teil2

So erschaffe ich diese Frage als „Teil 2“ :)

hey Leute pls helfen mir - ich bin ein Webdesigner, aber neugierig, Kodierung zu lernen, hielt damit aus meiner Zeit.

# 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 

oben Code mit "ActiveModel :: EachValidator" diesen Fehler werfen:

"nicht definierte Methode` Karte‘für "Bereich 1": 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 

oben Code mit "ActiveModel :: Validator" werfen Sie diesen Fehler:

"Unterklassen müssen eine validate (record) -Methode implementieren."


diese Modelldatei:

class Area < ActiveRecord::Base 


    validates :name, 
      :presence => true, 
      :uniqueness => {:scope => :city_id}, 
      :nested_attributes_uniqueness => {:field => :name} 

    belongs_to :city 

end 

Sie vollständigen Code hier finden: https://github.com/syed-haroon/rose

+0

Diese Validator-Klassen sehen wirklich komisch aus - Sie machen Ihre Prüfung direkt in der Klasse und nicht in der entsprechenden Instanz-Methode (wie die andere Frage, die Sie verknüpfen) –

+0

Sie haben anderen Code im Repo für die Validator als was Sie hier zeigen .. haben Sie es funktioniert? –

+0

Auch ich denke, Sie müssen diese Zeile https://github.com/syed-haroon/rose/blob/master/config/application.rb#L19 ändern, um die "# {Rails.root}/app/validators "' Ordner –

Antwort

1

@Syed: Ich glaube, Sie, dies zu tun versuchen. sonst antworte auf meinen Kommentar.

# 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 
+0

Hallo @Krishnaprasad, vielen Dank, dass du Kumpel hilfst und dich im Stackoverflow treffe :) Ich habe versucht, wie du erwähnt hast, aber es wirft diesen Fehler: "Unterklassen müssen eine validate (record) -Methode implementieren." jedenfalls habe ich das nicht in meine git repo eingeweiht. Wenn Sie Zeit finden, können Sie einen Blick darauf werfen. – Syed