我有一个命名范围(名称)的名字和姓氏组合,我想在搜索框中使用它。
我有以下代码:
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
答案 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)