ruby-on-rails – Rails gem rails3-jquery-autocomplete:如何查询多个字段

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails gem rails3-jquery-autocomplete:如何查询多个字段前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用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操作的简单插件.

猜你在找的Ruby相关文章