Ruby on rails 如何设置搜索查询

Ruby on rails 如何设置搜索查询,ruby-on-rails,Ruby On Rails,我正在构建一个Rails 5应用程序,在这个应用程序中,我允许我的用户添加他们正在寻找的公寓的搜索配置文件 他们可以向其用户对象添加以下内容: 最小尺寸 最大尺寸 最低价格 最高价格 房间 例如,用户可以寻找最小尺寸为100平方英尺,最大尺寸为200平方英尺的公寓。他们只希望每月最低支付500美元,最高支付1200美元,并且公寓至少有3个房间 我定期从远程数据库获取有关公寓的信息,每次我都想检查是否有与公寓数据匹配的搜索配置文件 如何创建一个SQL where查询来检查这一点 这就是我在用户对象

我正在构建一个Rails 5应用程序,在这个应用程序中,我允许我的用户添加他们正在寻找的公寓的搜索配置文件

他们可以向其用户对象添加以下内容:

最小尺寸 最大尺寸 最低价格 最高价格 房间 例如,用户可以寻找最小尺寸为100平方英尺,最大尺寸为200平方英尺的公寓。他们只希望每月最低支付500美元,最高支付1200美元,并且公寓至少有3个房间

我定期从远程数据库获取有关公寓的信息,每次我都想检查是否有与公寓数据匹配的搜索配置文件

如何创建一个SQL where查询来检查这一点

这就是我在用户对象上尝试的类方法

def self.match(size, price, rooms)
  User.where("size_min >= ? AND size_max <= ? AND price_min >= ? AND price_max <= ? AND rooms == ?", size, size, price, price, rooms)
end

您正在编写的查询似乎有不正确的不平等性检查,请尝试以下方法

def self.match(size, price, rooms)
  User.where("(? BETWEEN size_min AND size_max) AND (? BETWEEN price_min AND price_max) AND rooms = ?", size, price, rooms)
end

参考:

==应该是=。如果更改有效,请尝试。没有更改,但可能我不应该在查询中使用AND,应该是或其他吗?最后一段代码是您用于执行查询的数据?是的,这是正确的,但这只是一个示例。但是数据和形式总是一样的。你怎么知道最大和最小的尺寸和价格是多少?
<User id: 12, provider: "email", allow_password_change: false, firstname: "John", lastname: "Doe", email: "example@gmail.com", phone: "32323", area: "San Antonio", rooms: 3, size_min: 100, size_max: 200, price_min: 500, price_max: 1200, is_admin: true, created_at: "2019-09-26 15:43:15", updated_at: "2019-09-26 22:06:34"> 
[{"rooms":"3","size":"80","price":"7315"}]
def self.match(size, price, rooms)
  User.where("(? BETWEEN size_min AND size_max) AND (? BETWEEN price_min AND price_max) AND rooms = ?", size, price, rooms)
end