2010-03-06 14 views
8

Ich habe dynamische Form, die eine Reihe von Werten hat. Ich habe ein Partial erstellt, das Textfelder enthält, die ich zeige. Neben jedem von ihnen möchte ich ein Etikett mit dem Titel des Textes anzeigen. Zum Beispiel wäre Vorname und Nachname vorher nicht bekannt. Wie gehe ich vor? Es scheint, dass ich nicht direkt auf die Attribute zugreifen kann. Aber wenn ich das Beschriftungsfeld verwende, wird der Variablenname im Etikett nicht der tatsächliche Wert angezeigt.Fields_for dynamische Label

+0

Können Sie versuchen zu erklären, was Sie besser erreichen möchten? Vielleicht ein Beispiel geben? Ich habe versucht zu verstehen, um dir zu helfen, aber ich kann nicht verstehen, was du brauchst. – Petros

+0

Ich habe ein Objekt, das eine Eins-zu-viele-Beziehung mit einer Reihe von dynamischen Feldern {Name, Wert} hat. Wenn ein Benutzer die dynamischen Felder aktualisiert, möchte ich den Namen der Felder als tatsächliche Beschriftung anstelle der festbeschrifteten Beschriftung anzeigen. Oder ein vorgegebener String-Wert. Die dynamische Form befindet sich in einem partiellen und allen Daten. Snippets: _form.erb <% f.fields_for: entity_values ​​do | builder | %> <% = render "entity_value_fields",: f => Builder%> <% end% _entity_value_fields.erb <% = f.label: name%> {label muss der dynamische Name dieses Werts sein} <% = f.text_field: Wert%> ... – sebajb

Antwort

6

Gut! Dies war ein Spiegelbild davon, wie neu ich bin zu schienen. Sie können dies tun, indem Sie f.object.{attr_name} verwenden, und das hat funktioniert.

+0

Wie verwenden Sie das? Was wäre das Objekt in deinem Beispiel? –

5

f.object.{attr_name} hat nicht für mich funktioniert, aber f.object[:attr_name] tat.

+1

'f.object.first_name' oder' attr_name = 'first_name'; f.object.send (attr_name) 'wird funktionieren. 'f.object. {attr_name}' ist eine ungültige Ruby-Syntax. – Kris

2

Was:

f.object.send(attr_name) 

Das ist der Rubyish Weg sein würde.

+0

Können Sie das besser erklären? –

+2

Alle Formularersteller haben eine Methode namens 'object', die das Objekt zurückgibt, das das Formular umschließt, normalerweise ein ActiveRecord-Modell, sagen wir Person. Wir rufen dann 'send' an diese Person, um ihr eine Nachricht zu senden, also ist' person.send (: name) 'das gleiche wie' person.name'. Wie Sie mit 'send' sehen können, müssen wir das Attribut (z. B. last_name), das wir als unser Label anzeigen wollen, nicht fest codieren. Im obigen Fall kann 'attr_name' eine beliebige Zeichenfolge sein, entweder last_name, first_name, was auch immer. – Kris