Rails - 查询在开发中的视图和控制器中工作,但仅在生产中查看

时间:2012-10-29 21:51:32

标签: ruby-on-rails controller production

我是rails的新手,所以我的问题可能有一个简单的答案。我正在使用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。

1 个答案:

答案 0 :(得分:0)

在我看来,第二个查询基于您之前的搜索方法版本。

Rails不会凭空创建一个类似的查询,所以我认为你可能会在生成该查询的某个地方放置旧代码。确保您已重新启动生产Rails应用程序以获取最新的代码更改,并确保在正确的对象上调用正确的方法。