2015-11-24 2 views
0

У меня есть две модели: Number и RangeActiveRecord: найти по соответствующей стоимости объектов в пределах диапазона

# 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, но его следует выбрать, если я попрошу Ranges от => [#Number: id: 3, number: 3], до о.

Как я могу получить все Range для Number, которая не является first или last из Range, но в пределах диапазона?

Я пробовал его с .joins(:first, :last).where(['numbers.number <= ? .... без каких-либо успехов.

ответ

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 
+0

Спасибо. 'Range.where (' first_id <=? AND last_id> =? ', Number, number)' не будет возвращать какой-либо 'Range', потому что вместо' number' вместо 'number' используется' id' в 'where()'. –

Смежные вопросы