سؤال

كيف يمكنك تعيين معرف مخصص عند استخدام مساعد conct_box_tag في القضبان؟

لدي حلقة تنشئ مجموعة من مربعات الاختيار على أساس مجموعة:

- subject.syllabus_references.each do |sr|
      = check_box_tag 'question[syllabus_reference]', sr.id, :id => sr.id
      = label_tag sr.id, sr.name

أرغب في تعيين معرف مخصص بحيث تعمل التسمية الخاصة بي لمربع الاختيار بشكل صحيح ولكن لا يمكنني معرفة كيف (: id => sr.id لا يعمل ...).

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

هل كانت مفيدة؟

المحلول

لقد استخدمت هذا في طلبي لإنشاء علامات مربعات الاختيار من المجموعة وإرسال مجموعة منها:

<% @cursos.each do |c| %>
  <span class='select_curso'>
    <%= check_box_tag "vaga[curso_ids][]",
      c.id, (checked = true if form.object.curso_ids.include?(c.id)) %>
    <%= label_tag "vaga[curso_ids][][#{c.id}]", c.nome %>
  </span>
<% end %>

لذلك في المعلمات ، لدي صفيف "curso_ids" => ["1" ، "3" ، "5" بدلا من سلسلة "curso_ids" => "5". إذا كنت ترغب في إرجاع قيمة واحدة ، فاستخدم vaga [curso_id, ، وإلا استخدم vaga [curso_ids] [ لإرجاع صفيف.

نصائح أخرى

إذا أعطيت خانة الاختيار معلمة إضافية ستعمل:

= check_box_tag 'question[syllabus_reference]', 1, nil, :id => sr.id

@ganesh ، في الحل الخاص بك ، فإن التجزئة الناتجة عن النموذج التالي:

params[:question][:syllabus_reference] = {1 => 1, 2 => 2, 3 => 3, ...}

يجب أن تعمل هذه بشكل أفضل بالنسبة لك:

check_box_tag "question[syllabus_reference][]", sr.id, checked, {:id => "question_syllabus_reference_#{sr.id}"

لاحظ أن المعلمة الثالثة (تم فحصها) مطلوبة لهذا العمل. ستكون صفيف params الناتجة

params[:question][:syllabus_reference] = {1, 2, 3, ...}

أعتقد أنني اكتشفت ذلك ...

- subject.syllabus_references.each do |sr|
  = check_box_tag "question[syllabus_reference][#{sr.id}]", sr.id
  = label_tag "question[syllabus_reference][#{sr.id}]", sr.name

هذا يعمل ولكن إذا كان لديك طريقة أفضل ، فأعلمني!

كان هذا مفيدًا للغاية وجلبت بحثي لمدة أيام إلى نهايته. معظم ما وجدته حتى الآن يحتوي على بناء الجملة والمعلمات الإضافية التي تم وضع علامة على القضبان أو تجاهلها تمامًا. كل ما أريد القيام به هو تمرير صفيف من وجهة نظري إلى وحدة التحكم الخاصة بي واستخدم مربعات الاختيار لإخبار وحدة التحكم عن عناصر الصفيف التي يجب معالجتها. تمكنت من تقليل ما سبق إلى أبعد من ذلك ، إلى:

<%= check_box_tag "c[]", c.id %>

حيث يأتي C من قاعدة البيانات الخاصة بي:

<%= @objects.each do |c| %>

هذا بالطبع يمرر مجموعة من معرفات الكائن إلى وحدة التحكم الخاصة بي المتعلقة فقط بالإدخالات التي تم فحصها (لا يتم فحص الإدخالات افتراضيًا منذ أن تركت :خاطئة المعلمة ، والتي تنتج بالمناسبة نفس النتيجة مثل :حقيقي)، الذي تقريبيا كل ما احتاجه.

الآن أنا فقط بحاجة إلى تمرير مؤشر نوع الكائن - حتى مجرد سلسلة حرفية ستعمل بشكل جيد - بحيث تعرف وحدة التحكم نوع الكائن الذي يجب معالجته دون الاضطرار إلى زيادة النموذج الخاص بي بعمود إضافي. سأبدأ في ذلك الآن ونشر حلي ولكن يرجى إعلامي إذا كانت هناك طريقة سريعة وسهلة للقيام بذلك إذا كنت تعرف بالفعل.

عينة هامل

لنقول أن لديك ملف print اعتراض في مكان ما مع أ framed السمة ، عليك عرض قائمة من prints لذا داخل الحلقة ، ستقوم بإنشاء مخصص row و column مع معرف فريد من نوعه على كل checkbox للتحديث framed

.input.row.collapse
  = check_box_tag :framed, print.framed, nil, { id: "framed_#{print.id}" }

ليتو ،

فقط لإغلاق الحلقة ، تخليت عن محاولة تمرير مؤشر نوع الكائن من خلال check_box_tag. كل معلمة أضفتها إلى بناء الجملة الموضح في آخر مشاركتي أعلاه (أدناه ؟؟) تسبب ببساطة في حالة مربع الاختيار الافتراضي التحقق عوضا عن غير محدد, ، دون تمرير أي بيانات إضافية إلى وحدة التحكم.

بينما تبقى في حالة تأهب للحلول البديلة أثناء تقديمها ، في الوقت الحالي ، أقوم بدمج نوع الكائن في submit_tag القيمة. هذا يربط الوظيفة بالعرض ، لأن submit_tag القيمة هي ما يظهر للمستخدم على زر الإرسال ، ولكن يمكن القول أن هذا يفرض وضوحًا في العرض حتى لأنه يوفر الغموض المطلوب لوحدة التحكم.

التعلم يوما بعد يوم ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top