我是 Rails 新手,所以我的问题可能有一个简单的答案。我正在使用导轨 3.2.3。我有以下代码来对我的数据库执行搜索:
@search_results = User.search("test search")
在search
我的模型中定义的位置。@search_results = Data.search("test search")
当在我的开发环境中的视图或控制器中时,此代码对我来说非常有效。在生产中,它在视图中有效,但在控制器中无效。我不知道为什么。查看我的生产日志,视图和控制器的 SQL 有很大的不同:
当查询来自生产中的视图时,这就是我在日志中看到的内容:
SELECT 'users'.* FROM 'users' WHERE (concat(field1, ' ', field2, ' ', field3) LIKE '%test%' AND concat(field1, ' ', field2, ' ', field3) LIKE '%search%'
这正是我想要的。但是,当查询来自控制器时,SQL 变为:
SELECT 'users'.* FROM 'users' WHERE (field1 LIKE '%test search%' OR field2 LIKE '%test search%' OR field3 LIKE '%test search%')
我不明白生产环境中的控制器正在做什么来创建此更改。
编辑-这是search
方法:
def self.search(search)
if search
search_length = search.split.length
find(:all, :conditions => [(["concat(field1, ' ', field2, ' ', field3) LIKE ?"] * search_length).join(' AND ')] + search.split.map { |name| "%#{name}%" })
else
find(:all)
end
end
我在生产和开发中都使用 MySQL。