class Group < ActiveRecord::Base
has_and_belongs_to_many :users
# attribs: id, name
end
class User < ActiveRecord::Base
has_and_belongs_to_many :groups
# attribs: id, name
end
class Delivery < ActiveRecord::Base
belongs_to :recipient, :class_name => "User", :foreign_key => :recipient_id
# attribs: id, name, recipient_id
end
option_groups_from_collection_for_select(Group.all, :users, :name, :id, :name, @delivery.recipient_id)
效果:
金工组-------------------group_name
用户1------------------user_name
铆焊组
用户2
用户3
api说明:
Returns a string of <option>
tags, like options_from_collection_for_select
, but groups them by <optgroup>
tags based on the object relationships of the arguments.
Parameters:
-
collection
- An array of objects representing the<optgroup>
tags. -
group_method
- The name of a method which, when called on a member ofcollection
, returns an array of child objects representing the<option>
tags. -
group_label_method+ - The name of a method which, when called on a member of
collection
, returns a string to be used as thelabel
attribute for its<optgroup>
tag. -
option_key_method
- The name of a method which, when called on a child object of a member ofcollection
, returns a value to be used as thevalue
attribute for its<option>
tag. -
option_value_method
- The name of a method which, when called on a child object of a member ofcollection
, returns a value to be used as the contents of its<option>
tag. -
selected_key
- A value equal to thevalue
attribute for one of the<option>
tags, which will have theselected
attribute set. Corresponds to the return value of one of the calls tooption_key_method
. Ifnil
, no selection is made. Can also be a hash if disabled values are to be specified.
Example object structure for use with this method:
class Continent < ActiveRecord::Base
has_many :countries
# attribs: id, name
end
class Country < ActiveRecord::Base
belongs_to :continent
# attribs: id, name, continent_id
end
Sample usage:
option_groups_from_collection_for_select(@continents, :countries, :name, :id, :name, 3)
Possible output:
<optgroup label="Africa"> <option value="1">Egypt</option> <option value="4">Rwanda</option> ... </optgroup> <optgroup label="Asia"> <option value="3" selected="selected">China</option> <option value="12">India</option> <option value="5">Japan</option> ... </optgroup>
Note: Only the <optgroup>
and <option>
tags are returned, so you still have to wrap the output in an appropriate <select>
tag.