重複する名前を持つフィールドを設定機械化
-
13-09-2019 - |
質問
私は機械化し、一つの形に問題があります使用しています...フォームが同じ名前を持つ2つの選択ボックスがあります。
私は2番目いずれかを選択できますか?
すなわち。 NumNights第発生
私は、ドキュメントにこのようなものを見つけました
form.set_fields( :foo => ['bar', 1] )
これは動作しませんでした。
form.field_with(:name => [ 'NumNights', 2 ]).options[no_days.to_i-1].select
解決
フォームへの参照を取得し、メンバーを反復。このような何かます:
my_fields = form.fields.select {|f| f.name == "whatever"}
my_fields[1].whatever = "value"
あなたがフォームに記入終わった後、は、それを提出します。私はこのコードを実行していないが、私はそれが動作するはずだと思います。
他のヒント
ジオはまともな解決策を持っていますが、そこにいくつか逃した機会はあります。
あなたが唯一の要素を見つけている場合は、、それはその上にまず配列番号を選択する代わりに列挙#の発見と列挙#を使用することがおそらくより効率的です。また、あなたは、単に選択の際に再割り当てを行うことができます。
あなたが示唆したアプローチを見れば、その名前のフィールドが見つからない場合は、例外をトリガしますチャンスがあります:
# Original approach
my_fields = form.fields.select {|f| f.name == "whatever"}
# Chance of exception here, calling nil#whatever=
my_fields[1].whatever = "value"
私は#選択可算使用して簡単にループ内で仕事をして、より安全な、そのよう提唱したいです
my_fields = form.fields.select do |f|
if (f.name == "whatever")
# Will only ever trigger if an element is found,
# also works if more than one field has same name.
f.whatever = 'value'
end
end
他のアプローチは可算#最大1つの要素を返す見つけるを使用することです
# Finds only a single element
whatever_field = form.fields.find { |f| f.name == "whatever" }
whatever_field and whatever_field.whatever = 'value'
もちろん、あなたは例外キャッチとコショウあなたのコードを常にすることができますが、それは逆効果らしい。
所属していません StackOverflow