How do I set a unique ID for checkboxes in a multi-record Rails form?

前端 未结 4 675
太阳男子
太阳男子 2021-01-06 21:55

I\'ve set up a Rails form roughly following the instructions in this Railscast.

Here\'s the code for the form:

<% form_tag complete_todos_path, :m         


        
相关标签:
4条回答
  • 2021-01-06 22:24

    This is the expected behaviour of check_box_tag, as this comment on a rejected fix explains.

    You can use collection_check_boxes like this (haml syntax, sorry):

    # 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
    

    Of course you can use partials inside the block, just pass and use the builder inside.

    Check more options in the API docs.

    0 讨论(0)
  • 2021-01-06 22:37

    Can you try this and let us know if it works:

    check_box_tag "todo_ids[#{todo.id}]", todo.id %>
    
    0 讨论(0)
  • 2021-01-06 22:38

    <%= check_box_tag "todo_ids[]", todo.id, false, :id => "todo_id_#{todo.id}" -%> or whatever you want the id to be.

    I consider this a bug with check_box_tag caused by the seemingly hackish nature of manually giving it the name todo_ids[] and the method code calling sanitize_to_id(name). I just ran into this yesterday and I'm contemplating a patch.

    0 讨论(0)
  • 2021-01-06 22:39

    I ended up using a solution similar to Ryan's, but as I wrote in the comment I had to make a further change. In the form:

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

    In the action called by the form:

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

    Note the "params[:todo_ids].keys" at the end, which was a workaround to deal with the odd way the parameters were formatted:

    "todo_ids" => {"5"=>"5"}
    
    0 讨论(0)
提交回复
热议问题