Related Select Forms plugin
Plugin details
Documentation
ruby script/plugin install http://dvisionfactory.googlecode.com/svn/rails/plugins/related_select_forms/
The usage is trivial. First create a usual select (or collection_select) which will act as "parent". Afterwards you can create one or many dependent child(ren) select(s) by calling:
related_collection_select(
object, method, parent_select_tag, collection,
value_method, text_method, reference_method,
options = {}, html_options = {})
Arguments:
===========
* 'object', 'method', 'collection', 'value_method', 'text_method', 'options' & 'html_options' are used exactly the same way as in the standard collection_select helper method.
* 'parent_select_tag' specifies, as the name says, the parent select tag; argument can be passed as an array [:parent_object, :method] or directly as string referencing the tag id (e.g. "parent_object_method")
* Parameter 'reference_method' specifies the method that is used to get a reference to parent selection.
Additionally the 'options' argument can include a ':selected' attribute, that will override the default pre-selection behaviour (which uses to call '@object.method' to determine the to be selected option).
Example: Two related select forms
==================================
# tables car_companies: id, name car_models: id, name, car_company_id # view <%= collection_select( :car_company, :id, CarCompany.find(:all), :id, :name) %> <%= related_collection_select( :car_model, :id, [:car_company, :id], CarModel.find(:all), :id, :name, :car_company_id) %>
The code above will create two drop-down select tags. The 1st allows the selection of a car company. Based on this decision the 2nd select tag shows company specific car models.
Example: Three related select forms
====================================
The script allows to generate an almost unlimited number of related selects:
# tables categories: id, title, parent_id some_objects: id, name, category_id # controller @first_col = Category.find(:all, :conditions => 'parent_id IS NULL') @second_col = Category.find(:all, :conditions => 'parent_id > 0') @third_col = SomeObject.find(:all) @some_object = SomeObject.find(123) # view <%= collection_select(:category, :id, @first_col, :id, :title) %> <%= related_collection_select(:sub_category, :id, [:category, :id], @second_col, :id, :title, :parent_id) %> <%= related_collection_select(:some_object, :id, [:sub_category, :id], @third_col, :id, :name, :category_id, {}, {:size => 6}) %>
This example creates three related select tags. The 1st shows 'categories', the 2nd 'sub-categories' and the 3rd 'some_objects'. Because an '@some_object' instence variable is defined, item with id='123' will be pre-selected automatically in the 3rd select tag. The 1st & 2nd select forms will also berecursively adapted automatically.
Further Documentation
There is currently no advanced documentation for this plugin.
New documentationEdit plugin | Back in time (1 older version) | Last edited by: hardway, 10 months ago

