2010-03-06 12 views
8

Mam dynamiczną formę, która ma zestaw wartości. Utworzono część, która zawiera pola tekstowe, które wyświetlam. Obok każdego z nich chciałbym wyświetlić etykietę zawierającą tytuł tekstu. Na przykład imię i nazwisko nie byłyby wcześniej znane. Jak mam to zrobić? Wygląda na to, że nie mam bezpośredniego dostępu do atrybutów. Ale kiedy używam pola etykiety, wyświetlana jest nazwa zmiennej na etykiecie, a nie faktyczna wartość.Fields_for etykieta dynamiczna

+0

Czy możesz spróbować wyjaśnić, co chcesz osiągnąć lepiej? Może dać przykład? Próbowałem zrozumieć, aby ci pomóc, ale nie rozumiem, czego potrzebujesz. – Petros

+0

Mam obiekt, który ma relację jeden-do-wielu z zestawem pól dynamicznych {nazwa, wartość}. Gdy użytkownik aktualizuje dynamiczne pola, chcę wyświetlić nazwy pól jako rzeczywistą etykietę zamiast na sztywno oznaczoną etykietę. Lub z góry określoną wartość ciągu. Dynamiczna forma znajduje się w częściowych i wszystkich danych. Snippets: _form.erb <% f.fields_for: entity_values ​​do | builder | %> <% = renderuj "entity_value_fields",: f => builder%> <% end% _entity_value_fields.erb <% = f.label: nazwa%> {etykieta musi być nazwą dynamiczną tej wartości} <% = f.text_field: wartość%> ... – sebajb

Odpowiedz

6

Dobrze! To było odzwierciedleniem tego, jak nowe są dla mnie tory. Możesz to zrobić za pomocą f.object.{attr_name} i to zadziałało.

+0

Jak tego używasz? jaki byłby przedmiot w twoim przykładzie? –

5

f.object.{attr_name} nie działa dla mnie, ale zrobił to f.object[:attr_name].

+1

'f.object.first_name' lub' attr_name = 'first_name'; f.object.send (attr_name) 'zadziała. 'f.object. {attr_name}' jest nieprawidłową składnią Ruby. – Kris

2

Co o:

f.object.send(attr_name) 

To byłby Rubyish sposób.

+0

Czy możesz to wyjaśnić lepiej? –

+2

Wszystkie konstruktory formularzy mają metodę o nazwie 'object', która zwraca obiekt, który jest zawijany w formularzu, zazwyczaj model ActiveRecord, na przykład osoba. Następnie wywołujemy 'send' na tej osobie, aby wysłać mu wiadomość, więc' person.send (: name) 'jest takie samo jak' person.name'. Jak widzisz, użycie polecenia "wyślij" oznacza, że ​​nie musimy używać atrybutu hardcode (np. Last_name), który chcemy wyświetlić jako naszą etykietę. Tak więc w powyższym przypadku 'nazwa_atrybutu' może być dowolnym ciągiem znaków, albo nazwa_ostatniej, nazwa pierwsza, cokolwiek. – Kris