Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4和ActiveRecord中的建筑范围搜索_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails Rails 4和ActiveRecord中的建筑范围搜索

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

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

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

所以我可以在我的表格中搜索,但目前只能搜索一个重量,我需要能够搜索一个范围。我不确定这是否只是我需要做的事情的一种形式,或者我是否需要改变模型本身。非常感谢您的帮助

要以数组的形式发送权重,表单中可以有两个字段,如@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实现,就像数据采集器一样:在视图中提供多个字段,然后将这些字段合并提交。我在一个教程中就做到了这一点,我想我的情况是我不理解它的流程应该如何工作。我是否仍需要更改配置文件模型搜索的外观?