2014-11-14 60 views
0

搜索我有以下型號ActiveScaffold或ActiveRecord的如何在相關模型的列

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

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

現在ActiveScaffold我得到一個簡單的單行輸入框搜索銷售。

我需要做的是能夠通過客戶名稱搜索銷售。

應該有一種方法可以用ActiveScaffold或至少使用原生活動記錄功能來完成此操作。

我能想到的一種方式是,將客戶名稱添加爲列,並在創建時將其與銷售一起填充。不確定實現此目的的最佳方法應該是什麼。

編輯:從評論添加信息:

是否有可能在銷售表中定義類似

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. 

回答

1

嘗試這樣:

# 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. 

要結果的列表中顯示客戶名稱嘗試類似:

# Customer model 
def to_label 
    name 
end 

# Sales Controller 
config.list.columns = [:item_name, :customer] 

欲瞭解更多信息,請參閱API: Search page

1

如果你(和你應該有)一個customer_id,那麼你就可以查詢銷售與任何客戶的屬性,你用一個簡單的想加入:

Sales.joins(:customers).where(:'customers.name' => :john) 

其轉換爲下面的SQL

"SELECT `sales`.* FROM `sales` INNER JOIN `customers` ON `sales`.`customer_id` = `customers`.`id` WHERE `customers`.`name` = 'john'"