gpt4 book ai didi

ruby-on-rails - Rails - 查询在开发中的 View 和 Controller 中工作,但仅在生产中的 View 中工作

转载 作者:行者123 更新时间:2023-12-02 00:54:13 24 4
gpt4 key购买 nike

我是 Rails 新手,所以我的问题可能有一个简单的答案。我正在使用 Rails 3.2.3。我有以下代码来对我的数据库执行搜索:

@search_results = User.search("测试搜索")

其中 search 在我的模型中定义。当 @search_results = Data.search("test search") 位于我的开发环境中的 View 或 Controller 中时,此代码非常适合我。在生产中,它在 View 中工作,但在 Controller 中不起作用。我不知道为什么。看看我的生产日志, View 和 Controller 的 SQL 有很大差异:

当查询来自生产中的 View 时,这是我在日志中看到的内容:

SELECT 'users'.* FROM 'users' WHERE (concat(field1, ' ', field2, ' ', field3) LIKE '%test%' AND concat(field1, ' ', field2, ' ', field3) LIKE '%search%'

这正是我想要的。然而,当查询来自 Controller 时,SQL 变成这样:

SELECT 'users'.* FROM 'users' WHERE (field1 LIKE '%test search%' OR field2 LIKE '%test search%' OR field3 LIKE '%test search%')

我不明白生产环境中的 Controller 正在做什么来创建此更改。

编辑-这是搜索方法:

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。

最佳答案

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

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

关于ruby-on-rails - Rails - 查询在开发中的 View 和 Controller 中工作,但仅在生产中的 View 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13130195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com