ver validar validaciones rutas rails modelos las formularios formulario espaƱol asociaciones ruby-on-rails-3 validation hobo

ruby on rails 3 - validar - Prevenir el cambio de un campo en el modelo Rails



validar formulario ruby on rails (2)

Tengo dos modelos relacionados, digamos Activity y Step . Activity has_many :steps y Step belongs_to :activity que significa que la tabla de steps tiene una columna activity_id .

Esto está en Hobo 1.3, así que Rails 3.0.

Lo que quiero es asegurar que después de la creación del Step no sea posible mover un paso a otra Activity . No queremos que el campo activity_id cambie.

He eliminado el campo de los formularios de edición, pero estoy buscando una restricción más fuerte. Esencialmente quiero validar en la update (no en la create ) que la columna no se está tocando. La documentación de Hobo no sugiere nada por el estilo dentro de Hobo, así que estoy mirando las validaciones de Rails , pero hasta ahora no he encontrado la restricción de "solo hacer esto en la actualización" que recuerdo, ni una validación de que algo no sea cambiando



Puede declarar un atributo como read_only con attr_readonly :your_field_name . Pero esto no creará un error si intenta escribir este atributo, fallará en silencio. (Este atributo se ignorará para todas las actualizaciones de SQL)

Otra opción podría ser, para escribir una validación para este caso, podría verse así:

class Step < ActiveRecord::Base validate :activity_id_not_changed private def activity_id_not_changed if activity_id_changed? && self.persisted? errors.add(:activity_id, "Change of activity_id not allowed!") end end end

persisted? devuelve true, si este no es un registro nuevo y no se destruye.

Campo de golf:

http://api.rubyonrails.org/classes/ActiveRecord/ReadonlyAttributes/ClassMethods.html#method-i-readonly_attributes

http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-persisted-3F