Related Select Forms plugin

Plugin details

This plugin adds a new helper to the great RubyOnRails framework that allows to generate multiple, dependent HTML select tags. It handles the relations with simple JavaScript (requires prototype.js library), so you do not need to code any AJAX callbacks (can be handy when you only deal with a small amount of data). This plugin works also well with RJS templates and supports recursive pre-selection of the related select tags (look on the examples).

Websitehttp://code.google.com/p/dvisionfactory/ Repositoryhttp://dvisionfactory.googlecode.com/svn/rails/plugins/related_select_forms/ Author Dimitrij Denissenko Tags form LicenseUnknown

Documentation

Install the plugin:
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 documentation

Edit plugin | Back in time (1 older version) | Last edited by: hardway, 10 months ago