名为scopes的rails上的ruby(搜索)

时间:2010-04-21 14:54:39

标签: ruby-on-rails

我有一个命名范围(名称)的名字和姓氏组合,我想在搜索框中使用它。

我有以下代码:

named_scope :full_name, lambda { |fn| {:joins => :actor, :conditions => ['first_name LIKE ? OR second_name LIKE ?', "%#{fn}%", "%#{fn}%"]} }

def self.search(search)
  if search
    self.find(:all, :conditions => [ 'full_name LIKE ?', "%#{search}%"])
  else
    find(:all)
  end
end

但这不起作用,因为它会出现以下错误:

SQLite3::SQLException: no such column: full_name: SELECT * FROM "actors" WHERE (full_name LIKE '%eli dooley%') 

提前致谢

Houlahan

3 个答案:

答案 0 :(得分:3)

试试这个:

def self.search(search)
  if search
    self.full_name(search)
  else
    find(:all)
  end
end

命名范围不会向数据库添加列,而是每次都可以轻松访问而无需键入条件的记录。

答案 1 :(得分:1)

它不起作用,因为语句中的:conditions哈希:

self.find(:all, :conditions => ['full_name LIKE ?', "%#{search}%"])

- 在数据库表中查找名为full_name的实际列。命名范围(在Rails 3中简称为范围)在模型上实现为类方法,因此您需要这样做:

self.full_name(search)

答案 2 :(得分:0)

你看过Searchlogic了吗?

我强烈推荐它。

http://github.com/binarylogic/searchlogic