我正在使用rails3-
jquery-autocomplete gem在这里找到:
http://github.com/crowdint/rails3-jquery-autocomplete
对于如何查询模型的单个属性的说明很清楚,并且我可以使该工作没有问题.
然而,我的人物模型有两个属性要组合和查询.它们是first_name和last_name.我想将它们组合成一个名为full_name的伪属性.目前,我收到此错误:
ActiveRecord::StatementInvalid (sqlite3::sqlException: no such column: full_name: SELECT "people".* FROM "people" WHERE (LOWER(full_name) LIKE 'cla%') ORDER BY full_name ASC LIMIT 10):
Person模型没有full_name属性,尽管我在Person模型文件中有以下方法:
def full_name "#{self.first_name} #{self.last_name}" end
如何修改Person模型文件,以便对full_name的调用查询数据库以匹配first_name和last_name的组合?
解决方法
您的伪属性仅对已经检索到的记录有效,但与搜索记录无关.最简单的解决方案可能是一个名为
named scope的解决方案:
scope :search_by_name,lambda { |q| (q ? where(["first_name LIKE ? or last_name LIKE ? or concat(first_name,' ',last_name) like ?",'%'+ q + '%','%'+ q + '%' ]) : {}) }
因此,呼叫如:
Person.search_by_name(params[:q])
将返回一个适当的结果集.如果没有param被传递,它也将返回所有的条目(或者更具体地说,这个范围将不添加任何额外的),使其成为index操作的简单插件.