Search code examples
ruby-on-railsrails-activerecordactivescaffold

ActiveScaffold or ActiveRecord how to search on an associated model's column


I have following models

Customer: name:string, phone:string
has_many :sales

Sale: amount:float, item_name:string
belongs_to :customer

Now in ActiveScaffold I get a simple single line input box to search for sales.

What I need to do is, be able to search sales by the customer name as well.

There should be a way to do this with ActiveScaffold, or atleast with native active record functionality.

One way I can think of is, adding the customer name as a column and populate it along with sale while it is created.Not sure what the best approach to achieve this should be.

Edit: Adding info from comment:

Is it possible to define something like

Sales 
searchable_columns :amount, :association => {:customer => name}, :as => yumyum_column
now when i search by 
Sale.where(:yumyum_column => 1000)
or 
Sale.where(:yumyum_column => "Customer name") 
both will return the same record. 

Solution

  • Try something like this:

    # Sales Controller
    config.columns[:customer].search_sql = "customers.name"
    config.search.columns = [:item_name, :customer]  # Search by sale's item_name or customers's name.
    

    To show the customer name in the list of results try something like:

    # Customer model
    def to_label
      name
    end
    
    # Sales Controller
    config.list.columns = [:item_name, :customer]
    

    For more info, see the API: Search page