Returns check box tags for the collection of existing return values of
method
for object
's class. The value returned
from calling method
on the instance object
will
be selected. If calling method
returns nil
, no
selection is made.
The :value_method
and :text_method
parameters are
methods to be called on each member of collection
. The return
values are used as the value
attribute and contents of each
check box tag, respectively. They can also be any object that responds to
call
, such as a proc
, that will be called for
each member of the collection
to retrieve the value/text.
Example object structure for use with this method:
class Post < ActiveRecord::Base has_and_belongs_to_many :authors end class Author < ActiveRecord::Base has_and_belongs_to_many :posts def name_with_initial "#{first_name.first}. #{last_name}" end end
Sample usage (selecting the associated Author for an instance of Post, @post
):
collection_check_boxes(:post, :author_ids, Author.all, :id, :name_with_initial)
If @post.author_ids
is already [1]
, this would
return:
<input id="post_author_ids_1" name="post[author_ids][]" type="checkbox" value="1" checked="checked" /> <label for="post_author_ids_1">D. Heinemeier Hansson</label> <input id="post_author_ids_2" name="post[author_ids][]" type="checkbox" value="2" /> <label for="post_author_ids_2">D. Thomas</label> <input id="post_author_ids_3" name="post[author_ids][]" type="checkbox" value="3" /> <label for="post_author_ids_3">M. Clark</label> <input name="post[author_ids][]" type="hidden" value="" />
It is also possible to customize the way the elements will be shown by giving a block to the method:
collection_check_boxes(:post, :author_ids, Author.all, :id, :name_with_initial) do |b| b.label { b.check_box } end
The argument passed to the block is a special kind of builder for this collection, which has the ability to generate the label and check box for the current item in the collection, with proper text and value. Using it, you can change the label and check box display order or even use the label as wrapper, as in the example above.
The builder methods label
and check_box
also
accept extra html options:
collection_check_boxes(:post, :author_ids, Author.all, :id, :name_with_initial) do |b| b.label(class: "check_box") { b.check_box(class: "check_box") } end
There are also three special methods available: object
,
text
and value
, which are the current item being
rendered, its text and value methods, respectively. You can use them like
this:
collection_check_boxes(:post, :author_ids, Author.all, :id, :name_with_initial) do |b| b.label(:"data-value" => b.value) { b.check_box + b.text } end
Please login to continue.