validations validates uniqueness rails multiple custom columns ruby-on-rails validation activerecord polymorphic-associations

ruby-on-rails - validates - rails uniqueness multiple columns



Rails AR validates_uniqueness_of contra la relación polimórfica (2)

Simplemente ensanche el alcance para incluir el tipo aplicable:

class Field < ActiveRecord::Base belongs_to :fieldable, :polymorphic => :true validates_uniqueness_of :name, :scope => [:fieldable_id, :fieldable_type] end

¿Es posible validar la singularidad del atributo de un modelo hijo con un alcance contra una relación polimórfica?

Por ejemplo, tengo un modelo llamado field que pertenece a fieldable :

class Field < ActiveRecord::Base belongs_to :fieldable, :polymorphic => :true validates_uniqueness_of :name, :scope => :fieldable_id end

Tengo varios otros modelos (páginas, artículos) que tienen muchos campos. Entonces, lo que quiero es validar la singularidad del nombre de campo con respecto al modelo principal, pero el problema es que ocasionalmente una Página y un Artículo comparten el mismo número de ID, lo que hace que las validaciones fallen cuando no deberían.

¿Lo estoy haciendo mal o hay una mejor manera de hacerlo?


También puede agregar un mensaje para anular el mensaje predeterminado o usar el alcance para agregar la validación:

class Field < ActiveRecord::Base belongs_to :fieldable, :polymorphic => :true validates_uniqueness_of :fieldable_id, :scope => [:fieldable_id, :fieldable_type], :message => ''cannot be duplicated'' end

Como bonificación si vas a tu en.yml, e ingresas:

activerecord: attributes: field: fieldable_id: ''Field''

Reemplazará el ''sujeto'' predeterminado que los rieles agregan a los errores con el que especifique aquí. Entonces, en vez de decir: Fieldable Id has been already taken , diría:

Field cannot be duplicated