我使用机械化和一个表单上有一个问题...形式有两个名称相同的选择框。

如何选择第二个?

即。 NumNights第二次出现。

i。在文档是这样的发现:

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

另一种方法是使用可枚举#找到其中至多有一个元件返回:

# 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