2010-04-30 9 views
5

Ho un modello a cui l'utente non è autorizzato ad aggiornare la maggior parte dei campi dopo la creazione iniziale.Rails che riutilizzano la vista modulo in modifica, ma l'impostazione di alcuni campi readonly

Ho visto l'attributo HTML :readonly che posso attaccare su tutti gli aiutanti sul campo, ma fare condizionali su tutti i campi sembra ... icky.

Non sto utilizzando niente di speciale per creare i miei moduli al momento, semplicemente HAML. Qualcuno sa di un modo migliore di farlo?

Questo è quello che ho pensato di farlo finora:

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

utilizzato come:

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

La soluzione a farmi sbavare sarebbe un modo per impostare un attributo come letto -solo sul modello insieme a State Machine che poi si propagherebbe alle viste. :)

risposta

2

Ecco un modo per disabilitare un campo <INPUT> senza duplicare il modulo assistente nella vostra new e edit vista:

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

Utilizzare attr_protected (da Bill Eisenhauer).

1st result from Googling rails constants.

+3

'attr_protected' solo protegge il valore di essere aggiornato nel database. Preferirei che i miei utenti non passino il tempo ad aggiornare un campo per non salvarlo senza un avviso. :) Così ho voluto trovare un modo per impostare il valore di sola lettura su uno stato specifico e quindi la vista avrebbe saputo impostarlo come di sola lettura. In questo momento sto usando l'helper "set_readonly?" Che ho scritto nel corpo della domanda. – gaqzi

Problemi correlati