2012-05-19 20 views
5

Soy nuevo en la codificación - y tienen la reputación no es suficiente para comentar esta respuesta: Rails 3: Uniqueness validation for nested fields_forRails 3: validación de unicidad para fields_for anidada - Part2

Así que estoy creando esta pregunta como "Parte 2" :)

hey guys pls ayúdame - soy un diseñador de páginas web pero tengo curiosidad por aprender a escribir, sostenido con esto de mis días.

# 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 

por encima de código con "ActiveModel :: EachValidator" lanzar este error:

"método no definido 'mapa' para "Zona 1": Cadena"


# 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 

por encima de código con "ActiveModel :: Validator" arroje este error:

"Las subclases deben implementar un método de validación (registro)"


esto es archivo de modelo:

class Area < ActiveRecord::Base 


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

    belongs_to :city 

end 

Puedes encontrar el código completo aquí: https://github.com/syed-haroon/rose

+0

Esas clases de validador se ven muy raras - usted está haciendo su verificación directamente en la clase en lugar de en el método de instancia apropiado (como hace la otra pregunta) –

+0

Tiene un código diferente en el repositorio para el validador de lo que se muestra aquí ... ¿lo hiciste funcionar? –

+0

también creo que necesita cambiar esta línea https://github.com/syed-haroon/rose/blob/master/config/application.rb#L19 para incluir el '" # {Rails.root}/app/validators "' carpeta –

Respuesta

1

@Syed: Creo que usted está tratando de hacer esto. otra respuesta a mi comentario

# 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

Hola @Krishnaprasad, gracias por ayudar amigo y encantado de conocerte en stackoverflow :) Probé de la manera que mencionaste, pero está lanzando este error: "Las subclases deben implementar un método de validación (registro)". de todos modos no me he comprometido en mi git repo. Si encuentras tiempo, puedes echarle un vistazo. – Syed

Cuestiones relacionadas