Czy istnieje metoda (lub sposób na uzyskanie podobnej funkcjonalności), aby zrobić fields_for_with_index
?
Przykład:
<% f.fields_for_with_index :questions do |builder, index| %>
<%= render 'some_form', :f => builder, :i => index %>
<% end %>
Ta renderowana część musi wiedzieć, jaki bieżący indeks znajduje się w fields_for
pętli.
ruby-on-rails
loops
fields-for
Shpigford
źródło
źródło
Odpowiedzi:
Właściwie byłoby to lepsze podejście, bliższe zapoznanie się z dokumentacją Railsów:
Od: http://railsapi.com/doc/rails-v3.0.4/classes/ActionView/Helpers/FormHelper.html#M006456
źródło
Odpowiedź jest dość prosta, ponieważ rozwiązanie jest dostarczane w Railsach. Możesz użyć
f.options
params. Tak, wewnątrz renderowane_some_form.html.erb
,Dostęp do indeksu można uzyskać przez:
Nie musisz robić nic więcej.
Aktualizacja: Wygląda na to, że moja odpowiedź nie była wystarczająco jasna ...
Oryginalny plik HTML:
Renderowany podformularz:
źródło
<%= f.options[:child_index] %>
wyrenderowany podformularz (w tym przypadku: _some_form.html.erb), a nie oryginałbuilder
. Zaktualizowano odpowiedź, aby uzyskać więcej wyjaśnień.nil
za toOd wersji Rails 4.0.2 indeks jest teraz zawarty w obiekcie FormBuilder:
https://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-fields_for
Na przykład:
źródło
project_fields.options[:child_index]
. Więc podoba mi się ten sposób bardziej!Do Rails 4+
Łatka Monkey dla obsługi Rails 3
Aby zabrać się
f.index
do pracy w Railsach 3, musisz dodać małpą łatkę do inicjatorów projektów, do której dodasz tę funkcjonalnośćfields_for
źródło
.index
jest znacznie czystsze.Checkout Renderowanie kolekcji podrzędnych . Jeśli Twoim wymaganiem jest to, że szablon musi wykonać iterację po tablicy i wyrenderować szablon podrzędny dla każdego z elementów.
Wyrenderuje to „_children.erb” i przekaże lokalną zmienną „children” do szablonu w celu wyświetlenia. Do szablonu zostanie automatycznie udostępniony licznik iteracji z nazwą formularza
partial_name_counter
. W przypadku powyższego przykładu szablon zostałby zasilonychildren_counter
.Mam nadzieję że to pomoże.
źródło
question_comment_form
będąc moim częściowym imieniem ...Nie widzę przyzwoitego sposobu na zrobienie tego poprzez sposoby zapewniane przez Railsy, przynajmniej nie w -v3.2.14
@Sheharyar Naseer odnosi się do skrótu opcji, którego można użyć do rozwiązania problemu, ale nie na tyle, na ile widzę, w sposób, który wydaje się sugerować.
Zrobiłem to =>
lub
W moim przypadku
g.object_name
zwraca taki ciąg"gallery_set[blog_posts_attributes][2]"
dla trzeciego renderowanego pola, więc po prostu dopasowuję indeks w tym ciągu i używam go.Właściwie fajniejszym (i może czystszym?) Sposobem na zrobienie tego jest przekazanie lambdy i wywołanie jej przyrostu.
I w widoku
źródło
Wiem, że to trochę za późno, ale ostatnio musiałem to zrobić, możesz pobrać indeks pól w taki sposób
Mam nadzieję, że to pomoże :)
źródło
Dodano do fields_for child_index: 0
źródło
Jeśli chcesz mieć kontrolę nad indeksami, sprawdź
index
opcjęTo wyprodukuje
Jeśli formularz zostanie przesłany, parametry będą zawierać coś takiego jak
Musiałem użyć opcji indeksu, aby moje multi-rozwijane listy działały. Powodzenia.
źródło