我有两个模型:Number
和Range
# 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
试了一下但没有成功。
答案 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