ActiveScaffold或ActiveRecord如何搜索关联模型的列

时间:2014-11-14 11:43:33

标签: ruby-on-rails rails-activerecord activescaffold

我有以下模特

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. 

2 个答案:

答案 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