首先,我使用 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"
end
RideLaterRequest.rb
enum status:{
UnderConstruction:1,
Submitted: 2,
Unfulfilled:3,
QuotesReady:4,
Fulfilled: 5,
Rejected:6,
Ignored:7,
Cancelled:8,
Expired:9
}
答案 0 :(得分:3)
对于它的价值,我有两件事:
ActiveRecord#where
确实输入了清理功能,但在params
到达数据库呼叫之前验证您的like
通常是一种很好的做法。enum
运算符的值。您似乎将状态锁定在Production.where('status IS ?', params[:filter])
值中,因此应能够执行Production.where("status = ?", params[:filter])
我认为你也可以这样做:
reduce(lambda x,y:x*10+y,[10,20])