module Formize::ActionController::ClassMethods

Public Instance Methods

search_for(*args) click to toggle source

Generates a default action which is the resource for a unroll box. It generates an helper which takes in account selected columns for displaying. The label used to display items is based on the used columns. These columns can be used with I18n. The key used is: +views.unroll.<controller>.<action>+

@macro [new] options_details

@param [Hash] options Options to build controller action
@option options [Array] :columns The columns which are used for search and display
  All the content columns are used by default.
  A column can be a Symbol/String with its name or Hash with keys (+:name+,
  +:filter+, +:interpolation_key+)
@option options [Array,Hash] :conditions Default conditions used in the search query
@option options [String, Hash, Array] :joins To make a join like in +find+
@option options [Integer] :limit (80) Maximum count of items in results
@option options [String] :partial Specify a partial for HTML autocompleter
@option options [String] :filter ('%X%') Filter format used to build search query. 
  Specific filters can be specified for each column.

@overload search_for(name, model, options={})

Defines a controller method +search_for_NAME+ which searches for records
of the class +MODEL+.
@param [Symbol] name Name of the datasource
@param [String, Symbol] name Name of the model to use for searching
@macro options_details

@overload search_for(name, options={})

Defines a controller method +search_for_NAME+ which searches for records
of the class +NAME+.
@param [Symbol] name
  Name of the datasource. This name is used to find the model name
@macro options_details

@overload search_for(options={})

Defines a controller method +search_for+ which searches for records corresponding to the
resource controller name. +OrdersController#search_for+ searches for orders.
@macro options_details

@example Search clients with Person model

# app/controller/orders_controller.rb
class OrdersController < ApplicationController
  ...
  search_for :clients, :person
  ...
end

@example Search all accounts where name contains search and number starts with search

# app/controller/orders_controller.rb
class PeopleController < ApplicationController
  ...
  search_for :accounts, :columns=>[:name, 'number:X%']
  ...
end

@example Search for orders among all others

# app/controller/orders_controller.rb
class OrdersController < ApplicationController
  ...
  search_for
  ...
end
# File lib/formize/action_controller.rb, line 96
def search_for(*args)
  options = args.delete_at(-1) if args[-1].is_a? Hash
  name, model = args[0], args[1]
  action_name = "#{__method__}#{'_'+name.to_s if name}"
  model = model || name || controller_name
  if [String, Symbol].include?(model.class)
    model = model.to_s.classify.constantize             
  end
  return unless model.table_exists?
  generator = Generator::Base.new(self, action_name, model, options)
  class_eval(generator.controller_action, "#{__FILE__}:#{__LINE__}")
  Formize::CompiledLabels.send(:class_eval, generator.item_label_code, "#{__FILE__}:#{__LINE__}")
end