首先,我使用SQLITE作为数据库实现了一个示例搜索功能,一个rails应用程序。
查询内容如下:
@productions = Production.where('productions.status like ?', "%#{params[:filter]}%")这个很好用。我能够根据状态过滤记录。
现在,我在一个更大的应用程序上实现相同的逻辑,唯一的区别是它得到了POSTGRESQL的支持。
逻辑
@ride_later_requests = RideLaterRequest.where('ride_later_requests.status like ?', "%#{params[:filter]}%") --当我这次点击过滤器的时候,我说了一些错误
LINE 1: ...later_requests" WHERE (ride_later_requests.status like '%8%'...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT "ride_later_requests".* FROM "ride_later_requests" WHERE (ride_later_requests.status like '%8%')):我在这里做错什么了?这跟pg有关吗?请帮我修一下。
模式
create_table "ride_later_requests", force: :cascade do |t|
t.string "customer_name"
t.integer "status"
endRideLaterRequest.rb
enum status:{
UnderConstruction:1,
Submitted: 2,
Unfulfilled:3,
QuotesReady:4,
Fulfilled: 5,
Rejected:6,
Ignored:7,
Cancelled:8,
Expired:9
}发布于 2017-12-01 17:27:35
不管值多少钱,我有两件事:
ActiveRecord#where确实进行了输入清理,但通常在params到达DB调用之前验证它的有效性是很好的做法。like运算符的价值。似乎您正在将状态锁定在enum值中,因此您应该能够执行Production.where('status IS ?', params[:filter])。我想你也可以这样做:
Production.where("status = ?", params[:filter])https://stackoverflow.com/questions/47597616
复制相似问题