كيف يمكنني تعيين معرف فريد من نوعه لخانات الاختيار في نموذج القضبان متعددة السجلات؟

StackOverflow https://stackoverflow.com/questions/992094

سؤال

لقد قمت بإعداد قضبان نموذج بعد التعليمات تقريبا هذه رايلاست.

إليك رمز النموذج:

<% form_tag complete_todos_path, :method => :put do %>
    <ul>
    <div id="incomplete_todos">
    <% @incomplete_todos.each do |todo| %>
        <%= render :partial => todo %>
    <% end %>
    </div>
    </ul>
    <%= submit_tag "Mark as completed" %>
<% end %>

وهنا رمز TODO جزئي:

<div class="todo">
    <li>
        <%= check_box_tag "todo_ids[]", todo.id %>
        <%=h todo.name %>
        <%= link_to 'edit', edit_todo_path(todo) %>
        <%= link_to 'delete', todo, :confirm => 'Are you sure?', :method => :delete %>
    </li>
</div>

إنها تعمل بشكل رائع، لكنني أتطلع إلى بدء تنفيذ AJAX وأحتاج إلى كل مربع اختيار للحصول على معرف فريد. الآن، فإن علامات الإدخال التي تم إنشاؤها تبدو شيئا مثل هذا:

<input id="todo_ids_" name="todo_ids[]" type="checkbox" value="7" />

كل خانة اختيار لها نفس المعرف ("toDo_ids_")، وهي مشكلة. أظن أن الحل بسيط محرج، لكنني لا أرى ذلك. أي نصائح؟

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

المحلول 2

انتهى بي الأمر باستخدام حل مشابه ل Ryan's، ولكن كما كتبت في التعليق، اضطررت إلى إجراء تغيير إضافي. في التشكيل:

<%= check_box_tag "todo_ids[#{todo.id}]", todo.id %>

في الإجراء يسمى النموذج:

Todo.update_all(["completed_at = ?", Time.now], :id => params[:todo_ids].keys)

ملاحظة "المعالم [: toDo_ids] .keyes" في النهاية، التي كانت حلوة للتعامل مع الطريقة الفردية التي تم تنسيق المعلمات:

"todo_ids" => {"5"=>"5"}

نصائح أخرى

<%= check_box_tag "todo_ids[]", todo.id, false, :id => "todo_id_#{todo.id}" -%> أو كل ما تريد أن يكون المعرف.

أنا أعتبر هذا الخطأ مع Check_Box_tag الناجم عن طبيعة تتبع يبدو يدويا لإعطائه يدويا اسم ToDo_IDS [] ورمز الطريقة التي يتصل بها Sanitize_to_ID (الاسم). أنا فقط ركضت هذا بالأمس وأنا أفكر في التصحيح.

هل يمكنك تجربة هذا واسمحوا لنا أن نعرف ما إذا كان يعمل:

check_box_tag "todo_ids[#{todo.id}]", todo.id %>

هذا هو السلوك المتوقع لل check_box_tag, ، مثل يشرح هذا التعليق على الإصلاح المرفوض.

يمكنك استخدام collection_check_boxes مثله (حملا بناء جملة، آسف):

# Accumulate todos in a params hash like { todos: { to_complete: [] } }
= collection_check_boxes(:todos, :to_complete, @incomplete_todos, :id, :name) do |todo_builder|
  = todo_builder.label do
    # This is the result of calling :name on the todo, as specified
    # calling the helper
    = todo_builder.text
    = todo_builder.check_box

بالطبع يمكنك استخدام الأقراص داخل الكتلة، فقط تمر واستخدم Builder Inside.

تحقق من خيارات المزيد في مستندات API.

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