2010-03-06 6 views
8

Ho una forma dinamica che ha un set di valori. Ho creato un partial che contiene campi di testo che visualizzo. Accanto a ciascuno di essi vorrei visualizzare un'etichetta contenente il titolo del testo. Ad esempio, Nome e Cognome non sarebbero noti in precedenza. Come faccio a farlo? Sembra che non possa accedere direttamente agli attributi. Ma quando uso il campo etichetta, il nome della variabile nell'etichetta viene visualizzato non il valore effettivo.Campi_per l'etichetta dinamica

+0

Puoi provare a spiegare cosa vuoi ottenere meglio? Magari fai un esempio? Ho cercato di capire per aiutarti ma non riesco a capire di cosa hai bisogno. – Petros

+0

Ho un oggetto che ha una relazione uno-a-molti con un insieme di Campi dinamici {Nome, Valore}. Quando un utente sta aggiornando i campi dinamici, desidero visualizzare il nome dei campi come etichetta effettiva anziché l'etichetta codificata. O un valore di stringa predeterminato. La forma dinamica è all'interno di una parte e di tutti i dati. Frammenti: _form.erb <% f.fields_for: entity_values ​​do | builder | %> <% = render "entity_value_fields",: f => builder%> <% end% _entity_value_fields.erb <% = f.label: name%> {label deve essere il nome dinamico di tale valore} <% = f.text_field: value%> ... – sebajb

risposta

6

Bene! Questo è stato un riflesso di quanto sono nuovo per le rotaie. È possibile farlo utilizzando f.object.{attr_name} e ha funzionato.

+0

Come si usa questo? quale sarebbe l'oggetto nel tuo esempio? –

5

f.object.{attr_name} non ha funzionato per me, ma f.object[:attr_name] ha fatto.

+1

'f.object.first_name' o' attr_name = 'first_name'; f.object.send (attr_name) 'funzionerà. 'f.object. {attr_name}' è una sintassi Ruby non valida. – Kris

2

Che dire:

f.object.send(attr_name) 

Questo sarebbe il modo Rubyish.

+0

Puoi spiegarlo meglio? –

+2

Tutti i builder di form hanno un metodo chiamato 'object' che restituisce l'oggetto che il form sta eseguendo, tipicamente un modello ActiveRecord, ad esempio person. Quindi chiamiamo "send" su quella persona per inviarlo un messaggio, quindi "person.send (: name)" è lo stesso di "person.name". Come puoi vedere usando 'send' significa che non abbiamo bisogno di hardcode l'attributo (ad esempio last_name) che vogliamo visualizzare come nostra etichetta. Quindi nel caso precedente 'attr_name' può essere qualsiasi stringa, sia last_name, first_name, qualunque sia. – Kris