2010-04-30 9 views
5

Ich habe ein Modell, das der Benutzer nicht die meisten Felder nach der ursprünglichen Erstellung zu aktualisieren.Schienen Wiederverwendung Formularansicht auf bearbeiten, aber einige Felder schreibgeschützt

Ich habe das :readonly HTML-Attribut gesehen, das ich auf allen Feldhelfern anheften kann, aber das Bedingungswesen auf allen Feldern fühlend ... icky.

Ich benutze nichts besonderes für die Erstellung meiner Formulare im Moment, einfach nur HAML. Wer kennt einen besseren Weg?

Dies ist, was ich habe, so weit, es zu tun dachte:

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

als:

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

Die Lösung für mich ein Weg wäre, machen sabbern ein Attribut als Lese einzustellen -nur auf dem Modell zusammen mit State Machine das sich dann zu den Ansichten ausbreiten würde. :)

Antwort

2

Hier ist eine Möglichkeit, ein <INPUT> Feld zu deaktivieren, ohne das Formular Helfer in Ihren new und edit Ansichten zu duplizieren:

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

Verwenden Sie attr_protected (von Bill Eisenhauer).

1. Ergebnis von Googling rails constants.

+3

'attr_protected' schützt nur den Wert von in der Datenbank aktualisiert. Ich möchte lieber nicht, dass meine Benutzer Zeit damit verbringen, ein Feld zu aktualisieren, damit es nicht ohne Warnung gespeichert wird. :) Also wollte ich einen Weg finden, den Wert von schreibgeschützt auf einen bestimmten Zustand zu setzen, und dann würde die Ansicht wissen, dass sie schreibgeschützt ist. Ich benutze im Moment den 'set_readonly?' Helfer, den ich in den Fragetext geschrieben habe. – gaqzi