class Category < ActiveRecord::Base
acts_as_nested_set
....
= f.input :categories, :as=>:check_boxes, :collection=>Category.where(["parent_id is NULL"]) , :nested_set=>true
# put this file in any autoloaded path on rails app. HINT: app/inputs/check_boxes_input.rb | |
class CheckBoxesInput < Formtastic::Inputs::CheckBoxesInput | |
def to_html | |
unless options[:nested_set] | |
super | |
else | |
nested_wrapping(options) | |
end | |
end | |
def nested_wrapping(options) | |
choices_wrapping do | |
legend_html << | |
hidden_field_for_all << | |
choices_group_wrapping do | |
html_template_for_nested_set(options) | |
end | |
end | |
end | |
def html_template_for_nested_set(options) | |
options[:collection].map{|menu| | |
html_for_nested(menu) | |
}.join("\n").html_safe | |
end | |
def html_for_nested(menu, from_nested=false) | |
choice = [menu.name , menu.id] | |
first_wrap = choice_wrapping(choice_wrapping_html_options(choice)) do | |
nested = from_nested ? "" : sub_children(menu) | |
choice_html(choice) << nested | |
end | |
end | |
def sub_children(menu) | |
template.content_tag( :ul, | |
menu.children.collect do |child| | |
html_for_nested(child, true) | |
end.join("\n").html_safe, | |
{:style=>"margin-left:20px", :class=>"sub_item-#{menu.id} sub-item"} | |
) unless menu.leaf? | |
end | |
end |