문제

나는 기계화를 사용하고 있는데 한 형식에 문제가 있습니다 ... 양식에는 같은 이름의 선택 상자가 있습니다.

두 번째를 어떻게 선택할 수 있습니까?

즉. 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"

양식을 작성한 후에는 제출하십시오. 이 코드를 실행하지는 않았지만 작동해야한다고 생각합니다.

다른 팁

Geo는 괜찮은 솔루션을 가지고 있지만 거기에는 몇 가지 기회가 있습니다.

하나의 요소 만 찾는 경우 열거 가능한#을 선택한 다음 먼저 배열#을 사용하는 대신 열거 가능한#찾기를 사용하는 것이 더 효율적일 것입니다. 또는 선택 중에 재 할당을 간단히 할 수 있습니다.

제안 된 접근 방식을 보면 해당 이름이있는 필드를 찾을 수없는 경우 예외를 유발할 가능성이 있습니다.

# Original approach
my_fields = form.fields.select {|f| f.name == "whatever"}
# Chance of exception here, calling nil#whatever=
my_fields[1].whatever = "value"

나는 열거 가능한#select를 사용하여 옹호하고 단순히 루프 내부에서 작업을 수행하는 것만으로 훨씬 안전합니다.

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