2010-04-30 7 views
5

Tengo un modelo en el que el usuario no puede actualizar la mayoría de los campos después de la creación inicial.Rieles que reutilizan la vista de formulario en la edición, pero configurando algunos campos de forma sencilla

He visto el atributo HTML :readonly que puedo virar en todos los ayudantes de campo, pero hacer condicionales en todos los campos me parece ... icky.

No estoy usando nada especial para crear mis formularios en este momento, simplemente HAML. Alguien sabe de una mejor manera de hacer esto?

Esto es lo que he pensado en hacerlo hasta el momento:

def set_readonly?(object, html_attr) 
    html_attr.merge(object.new_record? ? {} : {:readonly => 'readonly'}) 
end 

utilizan como:

f.text_field :supplier_id, set_readonly?(@damaged_goods, {:size => 5}) 

La solución para que me cae la baba sería una manera de establecer un atributo como lectura -solo en el modelo junto con State Machine que luego se propagaría a las vistas. :)

Respuesta

2

Aquí hay una manera de desactivar un campo <INPUT> sin duplicar su asistente de formulario en sus new y edit vistas:

f.text_field :supplier_id, readonly: f.object.persisted? 
-3

Use attr_protected (de Bill Eisenhauer).

primer resultado de Google rails constants.

+3

'attr_protected' solo protege el valor de ser actualizada en la base de datos. Prefiero que mis usuarios no pierdan tiempo actualizando un campo para que no se guarde sin una advertencia. :) Por lo tanto, quería encontrar una manera de establecer el valor de solo lectura en un estado específico y luego la vista sabría configurarlo como de solo lectura. Por el momento estoy usando el helper 'set_readonly?' Que escribí en el cuerpo de la pregunta. – gaqzi

Cuestiones relacionadas