Module: DataMapper::Is::Select::ClassMethods
- Defined in:
- lib/is/select.rb
Instance Attribute Summary collapse
-
#select_field ⇒ Object
readonly
Returns the value of attribute select_field.
-
#select_options ⇒ Object
readonly
Returns the value of attribute select_options.
-
#value_field ⇒ Object
readonly
Returns the value of attribute value_field.
Instance Method Summary collapse
-
#items_for_select_menu(options = {}) ⇒ Object
Provides the Model content in a ready to use
<select>
options array.
Instance Attribute Details
#select_field ⇒ Object (readonly)
Returns the value of attribute select_field.
59 60 61 |
# File 'lib/is/select.rb', line 59 def select_field @select_field end |
#select_options ⇒ Object (readonly)
Returns the value of attribute select_options.
59 60 61 |
# File 'lib/is/select.rb', line 59 def @select_options end |
#value_field ⇒ Object (readonly)
Returns the value of attribute value_field.
59 60 61 |
# File 'lib/is/select.rb', line 59 def value_field @value_field end |
Instance Method Details
#items_for_select_menu(options = {}) ⇒ Object
Provides the Model content in a ready to use <select>
options array
Params
-
:options
-
:prompt [String/Boolean] => The text shown on the
<select>
field in the browser. (Defaults to “Select NameOfYourModel”) -
:divider [Boolean] => Whether to add a divider/separator between the prompt and the main options. (Defaults to
true
) -
:order [Array] => A normal DM order declaration. (Defaults to [:name] or the name of the select_field declared)
-
:show_root [Boolean] => Whether to add the Top Level Parent in the choices. (Defaults to
true
) -
:root_text [String] => The text to show as the Parent item in select list. (Defaults to “Top Level NameOfYourModel”)
-
Examples
Category.items_for_select_menu
=> [ [nil, 'Select Category'], [nil, '---'], [1, 'Category 1'] ,....]
Category.items_for_select_menu(:prompt => "Custom Prompt")
=> [ [nil, 'Custom Prompt'],...]
Category.items_for_select_menu(:prompt => false)
=> [ [1, 'Category 1'] ,...]
Category.items_for_select_menu(:divider => false )
=> array without the [nil, '---'] node
Category.items_for_select_menu(:order => [ :id.desc ] )
=> array with the order reversed. (Prompts & divider always comes first)
Category.items_for_select_menu(:publish_status => "on", :order => [ :id.desc ] )
=> returns only those items that matches the query params or just an empty Select Menu
If your model is a Tree:
Category.items_for_select_menu(:root_text => "Custom Root Text") # sets the text for the Top Level (root) Parent
=> [ ..., [0, 'Custom Root Text'],...]
Category.items_for_select_menu(:show_root => false) # removes the Top Level (root) Parent from the
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/is/select.rb', line 102 def ( = {}) # clean out the various parts = .slice(:prompt, :divider, :show_root, :root_text) = .except(:prompt, :divider, :show_root, :root_text) # defaults = { :prompt => "Select #{self.name}", :divider => true, :show_root => true, :root_text => "Top Level #{self.name}", }.merge() = { :order => [self.select_field.to_sym], }.merge() mi = self.[:is_tree] ? all({ :parent_id => nil }.merge() ) : all() res = [] if [:prompt] res << [nil, [:prompt]] res << ['nil', " ------ "] if [:divider] if self.[:is_tree] if [:show_root] res << [0, [:root_text]] res << ['nil'," ------ "] if [:divider] end end end if self.[:is_tree] mi.each do |x| res << [x.send(self.value_field), x.send(self.select_field)] unless x.children.blank? x.children.each do |child| res << [child.send(self.value_field), "-- #{child.send(self.select_field)}"] child.children.each do |grand_child| res << [ grand_child.send(self.value_field), "-- -- #{grand_child.send(self.select_field)}"] end unless child.children.blank? end end end else mi.each do |x| res << [x.send(self.value_field), x.send(self.select_field)] end end res end |