Ulf*_*ose 4 sqlite postgresql heroku ruby-on-rails-3
本地我正在使用SQLite开发,但在我的生产主机上,我正在运行PostgreSQL.在本地一切都很好,但在生产主机上却不是这样.
我已经建立了一种搜索表单,我可以用我喜欢的任何组合来评估数据库中的所有数据.只要我不使用布尔和/或日期字段,这似乎工作正常.PostgreSQL似乎不太喜欢我的代码......
所以,这是一些示例代码:
unless params[:analysis][:sporty].blank?
tmp_conditions_customer << ["(sporty ILIKE ?)", "%#{params[:analysis][:sporty]}%"]
end
Run Code Online (Sandbox Code Playgroud)
这评估为
SELECT COUNT(*) FROM "customers" WHERE ((sporty ILIKE '%%')
Run Code Online (Sandbox Code Playgroud)
无论如何,为什么呢?为什么 '%%'?
为了测试部署,我使用Heroku和Exceptional插件.这个插件给了我以下提示:
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
谢谢特殊,但这意味着什么?:-D类型强制转换为SQL查询?那怎么样?
在我的迁移中,数据库字段如下所示:
t.boolean :sporty
Run Code Online (Sandbox Code Playgroud)
在我正在创建此数据的表单中,我正在使用此代码
<%= f.label :sporty %><br />
<%= f.select :sporty, options_for_select({ "Ja" => true, "Nein" => false }), { :include_blank => '-----'} %>
Run Code Online (Sandbox Code Playgroud)
正如我已经提到的,SQLite是我的朋友,似乎是对PostgreSQL的更严格的评价导致了麻烦.
感谢您的帮助.
直接回答接近底部...
这评估为
SELECT COUNT(*) FROM "customers" WHERE ((sporty ILIKE '%%')
Run Code Online (Sandbox Code Playgroud)
无论如何,为什么呢?为什么 '%%'?
在SQL中,'%'是通配符.但是你的问题似乎是你正在构建一个有两个开放的parens的WHERE子句,但只有一个关闭paren.
像这样的WHERE子句可能会返回(或计数)所有行:
WHERE (sport ILIKE '%%')
Run Code Online (Sandbox Code Playgroud)
为SQL查询键入强制转换?那怎么样?
标准SQL具有CAST()函数.骨架语法是
CAST (expression AS type)
Run Code Online (Sandbox Code Playgroud)
所以,例如,你可以写
CAST (<any timestamp> AS DATE)
Run Code Online (Sandbox Code Playgroud)
将时间戳更改为日期数据类型,或
CAST ('32' AS INTEGER)
Run Code Online (Sandbox Code Playgroud)
将字符串'32'更改为整数32.
在我的迁移中,数据库字段如下所示:
t.boolean :sporty
Run Code Online (Sandbox Code Playgroud)
如果列"运动"是布尔值,这是你真正的问题.如果您尝试使用一个布尔字符串比较(你没:WHERE((运动型ILIKE"%%")),你会得到你所看到的错误消息,你想的语句读起来更像这些:
SELECT COUNT(*) FROM "customers" WHERE sporty;
SELECT COUNT(*) FROM "customers" WHERE sporty = true;
Run Code Online (Sandbox Code Playgroud)
要么
SELECT COUNT(*) FROM "customers" WHERE NOT sporty;
SELECT COUNT(*) FROM "customers" WHERE sporty = false;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17816 次 |
| 最近记录: |