我有以下模型
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.
尝试这样的事情:
# 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:搜索页
如果您的销售表中有(并且应该有)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'"