Основные настройки ассоциации (примечание, клиент является продолжением модели Person):настраиваемую область не возвращает никаких результатов
Customer has_many :orders
Order belongs_to :customer
Внутри Customer.rb, у меня есть следующий метод класса:
# SCOPE
def self.ordered_in_90_days
joins(:orders).where('orders.created_at > ?', 90.days.ago)
end
В моем тесте у меня есть следующий код, который создает новый заказ (автоматически создавая клиент для FactoryGirl), а затем использует собственный метод модели клиента, определенный выше:
it "finds customers who have ordered within the last 90 days" do
@order = FactoryGirl.create(:order, created_at: 50.days.ago)
@customer = @order.customer
Customer.count.should == 1 #passes
Order.count.should == 1 #passes
puts Customer.all.to_yaml #for debugging, see below
puts Order.all.to_yaml #for debugging, see below
Customer.ordered_in_90_days.should == [@customer] #fails! returns: []
end
Создаются заказчик и заказ, но ничего не возвращается в вызове метода (пустой массив). Что мне не хватает?
Вот некоторая дополнительная информация о заводах:
FactoryGirl.define do
factory :customer do
first_name "Wes"
last_name "Foster"
type "Customer"
end
factory :order do
customer
end
end
А вот выход отладки для Клиента и порядка (помните, клиент является продолжением лица, так вот почему вы видите person_id вместо Customer_ID) :
---
- !ruby/object:Customer
attributes:
id: 1
first_name: Wes
last_name: Foster
type: Customer
created_at: 2013-09-16 21:54:26.162851000 Z
updated_at: 2013-09-16 21:54:26.162851000 Z
middle_name:
---
- !ruby/object:Order
attributes:
id: 1
person_id:
created_at: 2013-07-28 21:54:26.135748000 Z
updated_at: 2013-09-16 21:54:26.192877000 Z
(Заказчик
Попробуйте поместить инструкцию отладчика в начале этого тестового примера, затем пройдите тест и проверьте все связанные объекты, чтобы убедиться, что их атрибуты точно такие, как вы ожидаете. Вы уверены, что получаете точно правильный заказ, клиент и created_at? –
Кроме того, возможно, разместите свой завод для заказа, чтобы мы могли видеть этот код. –
Я не вижу ничего плохого в методе/области класса. Я пробовал аналогичную область с некоторыми моделями в одном из моих приложений, и он работал нормально. –