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