Ruby on rails 在pg backed rails应用程序中,没有与给定名称和参数类型匹配的运算符

Ruby on rails 在pg backed rails应用程序中,没有与给定名称和参数类型匹配的运算符,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,首先,我使用SQLITE作为数据库,在rails应用程序中实现了一个示例搜索功能 查询结果如下: @productions=Production.where('productions.status like?',“%#{params[:filter]}%”) 这很有效。我能够根据状态过滤记录 现在我在一个更大的应用程序上实现了相同的逻辑,唯一的区别是它有POSTGRESQL 逻辑 @ride\u later\u requests=RideLaterRequest.where('ride\u l

首先,我使用SQLITE作为数据库,在rails应用程序中实现了一个示例搜索功能

查询结果如下:

@productions=Production.where('productions.status like?',“%#{params[:filter]}%”)
这很有效。我能够根据状态过滤记录

现在我在一个更大的应用程序上实现了相同的逻辑,唯一的区别是它有POSTGRESQL

逻辑


@ride\u later\u requests=RideLaterRequest.where('ride\u later\u 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
  }

值得一提的是,我有两件事:

  • 虽然
    ActiveRecord#其中
    进行输入清理,但通常最好在
    参数
    到达DB调用之前验证它
  • 在这两种情况下,我都看不到在调用DB时使用
    like
    操作符的值。似乎您正在将状态锁定在
    enum
    值中,因此您应该能够执行
    生产。其中('status IS?',params[:filter])
  • 我想你也可以这样做:

    Production.where("status = ?", params[:filter])
    

    @ride\u later\u requests=RideLaterRequest.where(“状态类似?”,“%\params[:filter]}%”)
    试试这个only@Gabbar还是一样的错误。指向
    like
    @ride\u later\u requests=RideLaterRequest.where(“status like?”,“%{params[:filter]}%”)这是怎么回事?现在仍然一样,指向
    like
    什么是状态数据类型?您能共享您的模式吗?