سؤال

أنا أستخدم ميكانيكية ولدي مشكلة في نموذج واحد ... يحتوي النموذج على صناديق اختيارتين بنفس الاسم.

كيف يمكنني تحديد الثانية؟

بمعنى آخر. 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"

كنت أدافع عن استخدام # العددية المحددة وحدد العمل ببساطة داخل الحلقة، أكثر أمانا بهذه الطريقة:

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