質問

私は機械化し、一つの形に問題があります使用しています...フォームが同じ名前を持つ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'

もちろん、あなたは例外キャッチとコショウあなたのコードを常にすることができますが、それは逆効果らしい。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top