Ruby on rails Rails 4和ActiveRecord中的建筑范围搜索
过去几天,我一直在寻找如何正确实施这一点。我尝试过几次教程,但没有一次对我有效。我不知道我做错了什么。 我需要做的是允许用户通过我网站上的配置文件进行搜索,应该允许他们使用范围进行搜索。例如,我收集身高和体重信息,用户应该能够搜索体重在140-150磅之间的人 这似乎应该是一个简单的解决方案,但我似乎找不到一个好的例子或教程,告诉我如何做到这一点 这是我的模型:Ruby on rails Rails 4和ActiveRecord中的建筑范围搜索,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,过去几天,我一直在寻找如何正确实施这一点。我尝试过几次教程,但没有一次对我有效。我不知道我做错了什么。 我需要做的是允许用户通过我网站上的配置文件进行搜索,应该允许他们使用范围进行搜索。例如,我收集身高和体重信息,用户应该能够搜索体重在140-150磅之间的人 这似乎应该是一个简单的解决方案,但我似乎找不到一个好的例子或教程,告诉我如何做到这一点 这是我的模型: class Profile < ActiveRecord::Base belongs_to :user after_c
class Profile < ActiveRecord::Base
belongs_to :user
after_create :get_name
after_create :get_city
def self.search(search)
if search
attribs = columns.map(&:name)
query = self.all
(search.keys & attribs).each do |search_field|
search_value = search[search_field]
unless search_value.empty?
query = query.where("#{search_field} ILIKE ?", "%#{search_value}%")
end
end
else
self.all
end
end
def get_name
self.user.update_name
self.save
end
def get_city
self.user.update_city
self.save
end
end
类配置文件
所以我可以在我的表格中搜索,但目前只能搜索一个重量,我需要能够搜索一个范围。我不确定这是否只是我需要做的事情的一种形式,或者我是否需要改变模型本身。非常感谢您的帮助 要以数组的形式发送权重,表单中可以有两个字段,如@jethroo所说,在模型中,可以执行以下操作:
Profile.where(weight: Range.new(*params[:weight]))
SELECT * FROM profiles WHERE profiles.weight BETWEEN 123 AND 140
params[:weight]
是数组,如[“123”,“140”]
这将在之间创建一个SQL,如下所示:
Profile.where(weight: Range.new(*params[:weight]))
SELECT * FROM profiles WHERE profiles.weight BETWEEN 123 AND 140
因此,我想出了一种方法,可以与我已有的模型一起工作
我最终构建了一个查询并传入了特定的查询参数,首先使用Profile方法上的一个方法检查表单中的不同验证,然后根据信息,将搜索查询传递到Profiles模型中
希望这是有道理的 假设您的配置文件中有一个属性权重。其中(权重:140..150)不起作用?否则我无法完全理解您的问题,您希望如何从该搜索参数建立范围?我将使用in查询并传递范围。它看起来几乎无法与正常的where查询区分开来。Profile.where(weight:[val_1…val_2])这是@jethroo的问题,我确实有一个Profile.weight,但我的问题是如何在rails表单中实现它。目前,我的表单结构如下:如何将其转换为一个范围系统,用户可以输入两个不同的值,搜索将正确处理。最简单的方法是提供两个字段,一个是起始字段,另一个是结束字段,从中可以相应地构建查询。这也可以通过一些JavaScript实现,就像数据采集器一样:在视图中提供多个字段,然后将这些字段合并提交。我在一个教程中就做到了这一点,我想我的情况是我不理解它的流程应该如何工作。我是否仍需要更改配置文件模型搜索的外观?