2015-11-24 116 views
0

通過關聯對象價值發現我有兩種型號:NumberRangeActiveRecord的:範圍內

# 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與第一關聯Number1最後Number7,但如果我問的=> [#Number: id: 3, number: 3]Ranges應該選擇,以O操作。

我怎樣才能得到一個Number這不是Rangefirstlast所有Range,但該範圍內?

.joins(:first, :last).where(['numbers.number <= ? ....試了一下,但沒有成功。

回答

0

我不知道這是不是因爲你在尋找什麼作爲高雅,但這並不一定需要這麼多的一類方法返回一個查詢的關係。在你的範圍模型這樣的方法,你可以簡單地調用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 
+0

謝謝。 'Range.where( 'first_id <=?AND last_id> =?',數,數字)' 將不會返回任何'Range',因爲它在使用''id'代替number'的'其中()'。 –