过去几天我一直在寻找如何正确实现这一点。尝试了几个教程,但似乎没有一个对我有用。我不知道我做错了什么。
我需要做的是允许用户通过我网站上的配置文件进行搜索,并且应该允许他们使用范围进行搜索。例如,我收集高度和体重信息,用户应该能够搜索体重在 140-150 磅之间的人。
这似乎应该是一个简单的解决方案,但我似乎找不到一个好的示例或教程来说明如何执行此操作。
这是我的模型:
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
所以我可以实际搜索我的表,但目前只能搜索一个重量,我需要能够搜索一个范围。我不确定这是否只是我需要做的 form_for 事情,或者我是否需要更改模型本身。任何帮助是极大的赞赏。
最佳答案
要将权重作为数组发送,您可以在表单中有两个字段,就像@jethroo 所说的,在模型中,您可以这样做:
Profile.where(weight: Range.new(*params[:weight]))
params[:weight]
是数组,如["123", "140"]
这将创建一个 SQL BETWEEN
,如下所示:
SELECT * FROM profiles WHERE profiles.weight BETWEEN 123 AND 140
关于ruby-on-rails - 在 Rails 4 和 ActiveRecord 中构建范围搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29975947/