Я создаю приложение Rails, и у меня есть модель с именем Item.Он принадлежит к типу, а has_many типы через ItemTypes.
Когда я запрашиваю Предметы по их ассоциации типов has_many, я не ожидаю результатов, но получаю обратно предметы, когда они принадлежат этому Типу.
# models/item.rb
class Item < ApplicationRecord
has_many :item_types
has_many :types, through: :item_types
belongs_to :type, inverse_of: :items
end
# models/type.rb
class Type < ApplicationRecord
has_many :items, inverse_of: :item_type, dependent: :nullify
end
# models/itemtype.rb
class ItemType < ApplicationRecord
belongs_to :item
belongs_to :type
end
Пример (ожидаемое поведение):
food = Type.create
pizza = Item.create(type: food)
irb> pizza.type
food
irb> pizza.types
[]
Однако, когда я запрашиваю элементы со связанным типом элемента и не ожидаю результатов, я получаю обратно свой элемент, даже если нет объектов ItemType.
irb> Item.where(type: food)
pizza
irb> Item.where(types: food)
pizza
(пицца все еще возвращается, несмотря на то, что pizza.types возвращает [])
Я не уверен, что происходит за кулисами, но я считаю, что это неожиданное поведение,Почему это происходит и как я могу получить свой запрос Item.where(types: food)
, который не дал результатов?