Apakah ada metode (atau cara untuk melakukan fungsi serupa) untuk melakukan a fields_for_with_index
?
Contoh:
<% f.fields_for_with_index :questions do |builder, index| %>
<%= render 'some_form', :f => builder, :i => index %>
<% end %>
Parsial yang sedang dirender perlu mengetahui apa indeks saat ini di fields_for
loop.
ruby-on-rails
loops
fields-for
Shpigford
sumber
sumber
Jawaban:
Ini sebenarnya akan menjadi pendekatan yang lebih baik, mengikuti dokumentasi Rails lebih dekat:
Dari: http://railsapi.com/doc/rails-v3.0.4/classes/ActionView/Helpers/FormHelper.html#M006456
sumber
Jawabannya cukup sederhana karena solusinya disediakan dalam Rails. Anda dapat menggunakan
f.options
params. Jadi, di dalam hasil render Anda_some_form.html.erb
,Indeks dapat diakses oleh:
Anda tidak perlu melakukan apa pun.
Memperbarui: Sepertinya jawaban saya tidak cukup jelas ...
File HTML Asli:
Sub-Formulir yang Diberikan:
sumber
<%= f.options[:child_index] %>
dalam sub-formulir yang telah Anda berikan (Dalam hal ini: _some_form.html.erb), bukan ke aslinyabuilder
. Jawaban diperbarui untuk klarifikasi lebih lanjut.nil
untuk ituMulai Rails 4.0.2, indeks sekarang disertakan dalam objek FormBuilder:
https://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-fields_for
Sebagai contoh:
sumber
project_fields.options[:child_index]
. Jadi saya lebih suka cara ini!Untuk Rails 4+
Dukungan Monkey Patch For Rails 3
Untuk mulai
f.index
bekerja di Rails 3 Anda perlu menambahkan patch monyet ke penginisialisasi proyek Anda untuk menambahkan fungsionalitas inifields_for
sumber
.index
jauh lebih bersih.Checkout Merender koleksi parsial . Jika persyaratan Anda adalah bahwa templat perlu melakukan iterasi pada larik dan merender sub templat untuk setiap elemen.
Ini akan merender "_children.erb" dan meneruskan variabel lokal 'children' ke template untuk ditampilkan. Penghitung iterasi secara otomatis akan tersedia untuk templat dengan nama formulir
partial_name_counter
. Dalam kasus contoh di atas, template akan diumpankanchildren_counter
.Semoga ini membantu.
sumber
question_comment_form
menjadi nama parsial saya ...Saya tidak dapat melihat cara yang layak untuk melakukan ini melalui cara-cara yang disediakan oleh Rails, setidaknya tidak di -v3.2.14
@Sheharyar Naseer membuat referensi ke opsi hash yang dapat digunakan untuk memecahkan masalah tetapi tidak sejauh yang saya lihat dari cara yang tampaknya dia sarankan.
Saya melakukan ini =>
atau
Dalam kasus saya
g.object_name
mengembalikan string seperti ini"gallery_set[blog_posts_attributes][2]"
untuk bidang ketiga yang diberikan jadi saya hanya mencocokkan indeks dalam string itu dan menggunakannya.Sebenarnya cara yang lebih keren (dan mungkin lebih bersih?) Untuk melakukannya adalah dengan melewatkan lambda dan memanggilnya ke increment.
Dan dalam tampilan
sumber
Saya tahu ini agak terlambat tetapi saya baru-baru ini harus melakukan ini, Anda bisa mendapatkan indeks field_for seperti ini
Saya harap ini membantu :)
sumber
Ditambahkan ke field_for child_index: 0
sumber
Jika Anda ingin memiliki kendali atas indeks, periksa
index
opsinyaIni akan menghasilkan
Jika formulir dikirimkan, params akan menyertakan sesuatu seperti
Saya harus menggunakan opsi indeks agar multi-dropdown saya berfungsi. Semoga berhasil.
sumber