ruby-on-rails - 在 Rails 4 和 ActiveRecord 中构建范围搜索

标签 ruby-on-rails ruby activerecord

过去几天我一直在寻找如何正确实现这一点。尝试了几个教程,但似乎没有一个对我有用。我不知道我做错了什么。

我需要做的是允许用户通过我网站上的配置文件进行搜索,并且应该允许他们使用范围进行搜索。例如,我收集高度和体重信息,用户应该能够搜索体重在 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/

相关文章:

ruby-on-rails - 如何使用 Sendgrid API 发送电子邮件以使用 rails 4 发送电子邮件?我似乎无法把所有的部分放在一起

css - Sass 混合递归; @include 循环

ruby-on-rails - Active Record 序列化 attr 丢失字符串编码(可能是 YAML 问题),解决方法?

ruby-on-rails - 邮件在 ruby​​ on rails 中合并,但数量很多

ruby-on-rails - 如何验证 Rails 中子模型中嵌套属性的父 ID 是否存在

ruby - 使用 libxml-ruby 逐 block 处理大型 XML 文件

activerecord - 设置和测试以防止 ActiveRecord 中的重复多对多关系

ruby-on-rails - ActiveRecord 的 find 方法是否会在其参数上自动调用 to_i?

javascript - Rails 不显眼的 javascript - 无法加载资源

ruby-on-rails - Ruby 测试覆盖率映射工具