2017-08-13 4 views
0

Ich verwende Cocoon für verschachtelte Formulare. Für task Datensätze , die bereits erstellt wurden, möchte ich description read_only sein.Rails Cocoon schreibgeschützte Felder

projects/_form ::

= simple_form_for @project do |f| 
    = f.input :name 
    = f.input :description 
    %h3 Tasks 
    #tasks 
    = f.simple_fields_for :tasks do |task| 
     = render 'task_fields', f: task 
    .links 
     = link_to_add_association 'add task', f, :tasks 
    = f.submit 

Und _task_fields:

.nested-fields 
    - if @task.description? 
    = f.text_field :description, disabled: true 
    - else 
    = f.input :description 
    = f.input :done, as: :boolean 
    = link_to_remove_association "remove task", f 

Derzeit ist die Validierung in _task_fields funktioniert nicht: undefined method <description> for nil:NilClass in der Zeile mit if Aussage. Wie kann ich die IF statement richtig schreiben?

+0

Was ist das Problem, das Sie gerade haben? – Pavan

+0

'disabled: true' sollte mit' Cocoon' arbeiten, sehe ich 'else' Abschnitt (' = f.input: description') hat nicht 'disabled: true' – dp7

+0

Die Idee ist es, die Beschreibung' read_only' für Datensätze zu haben die zuvor gespeichert und beim Rendern einer neuen Aufgabe bearbeitet wurden –

Antwort

1

Für Aufgabensätze, die bereits erstellt wurden, möchte ich, dass die Beschreibung read_only lautet.

Sie machen es falsch. Sie sollten durch die Prüfung zu tun mit new_record? wie so

.nested-fields 
    - unless f.object.new_record? 
    = f.text_field :description, disabled: true 
    - else 
    = f.input :description 
    = f.input :done, as: :boolean 
    = link_to_remove_association "remove task", f 

auch in der Lage sein disabled: true unter Verwendung, wird der Wert der Beschreibung nicht vorgelegt werden und nicht durch params geben werden kann. Wenn Sie den Beschreibungswert in params haben möchten, verwenden Sie stattdessen readonly: true.

.nested-fields 
    - unless f.object.new_record? 
    = f.text_field :description, readonly: true 
    - else 
    = f.input :description 
    = f.input :done, as: :boolean 
    = link_to_remove_association "remove task", f 
Verwandte Themen