Rails where子句带有逻辑

时间:2015-12-24 08:43:18

标签: ruby-on-rails ruby ruby-on-rails-3

我有一张表,用于存储年龄范围。

年龄范围保存为Range对象,例如红宝石中的(1..4)。现在,当我必须获取一个年龄落在年龄范围内的所有记录时。我必须这样做

table.select{|s| s.age_range.include?(19)}

但是这会返回一个数组,而不是一个活动的记录关系对象。所以我更喜欢做类似的事情:

table.where(s.age_range:  age_range.include?(19)}

显然不正确。但它得到了重点。我想知道这是否可能。

model.rb

class Model < ActiveRecord::Base
  attr_accessor :age_range_min, :age_range_max

  before_create :set_age_range
  serialize :age_range

  def set_age_range
    self.age_range = (age_range_min.to_i..age_range_max.to_i)
  end
end

1 个答案:

答案 0 :(得分:0)

好的,因为SQL不了解或不知道如何解释文本blob,所以它无法提取所需的记录。

但是,如果您不一定要寻找一个高性能的解决方案(即您只想要一个ActiveRecord :: Relation),那么您可以使用生成的数组来执行此操作...

<span class="btn-collapse collapsed" data-toggle="collapse" data-target="#customerinformation-collapse"></span>