gpt4 book ai didi

ruby-on-rails - Rails Autocomplete 在本地工作但在 Heroku 上不工作,可能是 MySQL/Postgre 问题

转载 作者:行者123 更新时间:2023-11-29 12:47:57 25 4
gpt4 key购买 nike

我正在使用 rails3-jquery-autocomplete gem 在我的 Rails 3 应用程序中自动完成表单中的字段(产品)。用户可以输入产品名称或产品代码,它们都是产品表中的字符串列。在本地一切正常,但在 heroku 上,ajax 请求崩溃并出现标准的 500 heroku 错误:

We're sorry, but something went wrong (500)

我认为这可能是一个 postgre/sql 问题 - 我在本地使用 mysql 进行开发,但 heroku 在 postgre sql 数据库上运行,我在通过 ajax 自动完成请求获取调用的函数中执行以下查询:

  def get_autocomplete_items(parameters)
items = Product.select("DISTINCT CONCAT_WS(' ', product_code, title, id) AS full_name, product_code, title, id").where(["CONCAT_WS(' ', product_code, title) LIKE ?", "%#{parameters[:term]}%"])
end

在本地,这会返回一个 json 格式的数组,包括所有匹配的 produc_id 和名称:

[{"id":"9","label":"xt-pnt-dress_45 - Catherine Malandrino","value":"xt-pnt-dress_45 - Catherine Malandrino"}, ... ]

如果有人知道如何更改该查询以使其符合 heroku 或任何其他想法,我将非常感激。谢谢。

最佳答案

Heroku 使用 PostgreSQL 8.3 for shared databases and 9.0 for dedicated databases .都不是version 8.3也不version 9.0有一个 concat_ws 函数,该函数仅在 version 9.1+ 中可用.

不过您可以手动连接字符串:

items = Product.select("DISTINCT product_code || ' ' || title || ' ' || id AS full_name, product_code, title, id").where(["product_code || ' ' || title LIKE ?", "%#{parameters[:term]}%"])

只要 product_codetitleid 都不是 NULL,它就可以工作。如果您可能有 NULL,那么您可以将它们 COALESCE 包装起来(例如 COALESCE(product_code || ' ', ''))以将它们变成空字符串。

或者,您可以处理 Ruby 中的 full_name:

def full_name
[product_code, title, id].reject(&:blank?).join(' ')
end

并为 LIKE 生成一个单独的列,或者用 LIKE 检查两列:

where('product_code LIKE ? OR title LIKE ?', "%#{parameters[:term]}%", "%#{parameters[:term]}%")
where('produce_code LIKE :pat OR title LIKE :pat', :pat => "%#{parameters[:term]}%")

此外,您应该知道 MySQL 的 LIKE 不区分大小写,但 PostgreSQL 的不区分大小写,因此您可能希望将所有内容小写以避免混淆:

where('LOWER(product_code) LIKE :pat OR LOWER(title) LIKE :pat', :pat => "%#{parameters[:term].downcase}%")

|| is a logical-OR in MySQL ,在 Ruby 中连接三个字符串(即 def full_name)并使用单独的小写 LIKE 检查 product_codetitle 可能是最简洁的可移植解决方案。

将您的开发环境切换到 PostgreSQL 也是一个好主意,将版本与您的部署环境相匹配也是一个好主意。还有其他差异会引起麻烦。

关于ruby-on-rails - Rails Autocomplete 在本地工作但在 Heroku 上不工作,可能是 MySQL/Postgre 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8651143/

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