【问题标题】:PostgreSQL Ruby Heroku ProblemsPostgreSQL Ruby Heroku 问题
【发布时间】:2011-09-13 04:29:57
【问题描述】:

此搜索条件在 MySQL 和 SQLite 中运行良好,但在 PostgreSQL 中失败:

控制器:

@inventories = Inventory.search(params[:search], params[:page])

型号:

def self.search
paginate    :per_page => 10,
            :page => page, 
            :conditions => ['part_number = ? OR item LIKE ? OR catalognumber LIKE ?', "#{search}", "%#{search}%", "%#{search}%"],
            :order => 'item'
end

IT 在 HEROKU 的 PostgreSQL 日志中产生了这个错误:

ActiveRecord::StatementInvalid (PGError: ERROR:  invalid input syntax for integer: ""
2011-06-11T20:25:46+00:00 app[web.1]: : SELECT * FROM "inventories" WHERE (part_number = E'' OR item LIKE E'' OR catalognumber LIKE E'')  ORDER BY item LIMIT 10 OFFSET 0):

我该如何解决这个问题?

解决方案...这是使用 LIKE 而不是 ILIKE 的问题 http://www.postgresql.org/docs/8.3/static/functions-matching.html

【问题讨论】:

  • 提示:使用 ILIKE 而不是 LIKE,这样您的搜索在 Heroku 上不区分大小写。

标签: ruby-on-rails postgresql search activerecord heroku


【解决方案1】:

据推测,其中一个字段需要一个整数,而 Postgres 在这方面比 MySQL 宽松得多。我不应该有任何引号。 (它应该为零,或者根本没有字段。)

【讨论】:

  • 零件编号是一个整数。其余的是字符串
  • 投射它:part_number = cast(? as int)
  • 添加 search.to_i,修复错误。但我没有能力搜索字符串。例如说我搜索“项目”...搜索不起作用。
  • 我实际上是在你的sql语句中的意思,就像上面一样。
  • 也就是说,我对 ruby​​ 知之甚少(但:正在学习...),所以我可能把 RoR/Active Record 的事情搞错了,也就是说,我对它有点怀疑. :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
  • 2012-05-23
  • 2019-04-01
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
相关资源
最近更新 更多