加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails gem rails3-jquery-autocomplete:如何

发布时间:2020-12-16 20:08:01 所属栏目:百科 来源:网络整理
导读:我正在使用rails3- jquery-autocomplete gem在这里找到: http://github.com/crowdint/rails3-jquery-autocomplete 对于如何查询模型的单个属性的说明很清楚,并且我可以使该工作没有问题. 然而,我的人物模型有两个属性要组合和查询.它们是first_name和last_n
我正在使用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操作的简单插件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读