중복 이름으로 필드를 설정합니다
-
13-09-2019 - |
문제
나는 기계화를 사용하고 있는데 한 형식에 문제가 있습니다 ... 양식에는 같은 이름의 선택 상자가 있습니다.
두 번째를 어떻게 선택할 수 있습니까?
즉. 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'
물론 코드는 항상 예외적 인 포획으로 후추를 뿌릴 수 있지만 비생산적인 것처럼 보입니다.
제휴하지 않습니다 StackOverflow