我有以下模特
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.
答案 0 :(得分: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'"
答案 1 :(得分: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