ActiveRecord:通过关联对象在范围内查找值

时间:2015-11-24 19:11:33

标签: ruby-on-rails activerecord

我有两个模型:NumberRange

#  number   :integer
class Number < ActiveRecord::Base
  has_many :ranges
end

#  first_id   :integer
#  last_id    :integer
class Range < ActiveRecord::Base
  belongs_to :first, class_name: 'Number'
  belongs_to :last,  class_name: 'Number'
end

我的数据库中有一些条目:

=>  [#Number: id: 1, number: 1]
=>  [#Number: id: 2, number: 7]
=>  [#Number: id: 3, number: 3]
=>  [#Number: id: 4, number: 42]
=>  [#Number: id: 5, number: 23]

=>  [#Range: id: 1, first_id: 1, last_id: 2]

已保存的Range与第一个Number 1和最后一个Number 7相关联,但如果我要求{{}},则应将其选中{1}}的{​​1}}。

我怎样才能获得Ranges的所有=> [#Number: id: 3, number: 3]Range不是Number的{​​{1}}或first,而是在范围内?

我用last试了一下但没有成功。

1 个答案:

答案 0 :(得分:0)

我不知道这是否与您正在寻求的一样优雅,但这并不一定需要成为一种关系,就像返回查询的类方法一样。使用Range模型中的这种方法,您只需调用Range.numbers并返回您正在寻找的结果。

def numbers
    Number.where( number: first_id..last_id )
end

或者,在Number.rb中,您可以使用范围方法,如下所示:

def ranges
    Range.where( 'first_id <= ? AND last_id >= ?', number, number )
end