Вот мои модели:Rails inverse_of не работает с условиями
class Flight < ActiveRecord::Base
has_many :seats, dependent: :destroy, inverse_of: :flight
end
class Seat < ActiveRecord::Base
belongs_to :flight, inverse_of: :seats
end
кажется, что inverse_of
работает хорошо, но когда я использую условие он не работает:
f1 = Flight.first
s1 = f1.seats.first
s2 = f1.seats.second
s3 = f1.seats.where(id: 0..1000000).third
s1.flight.equal? s2.flight
=> true
s1.flight.equal? s3.flight
=> false
Что объясняет это? Как я могу сделать эту работу?
Благодарим вас за подробное объяснение. Я знаю равных? тесты для «одинаковости» объектов. Я использовал его здесь, чтобы продемонстрировать, что это не тот же объект. Моя проблема не проверяется на равенство. Проблема в том, что мне нужно вернуть тот же объект, а не новый. Меня беспокоит различное поведение активной записи, когда я использую условия. – davidrac
'Проблема в том, что мне нужно вернуть тот же объект, а не только что созданный.' И проблема заключается в том, что вы не можете этого сделать, повторно запросив базу данных. Из-за этого фундаментального факта (два идентичных запроса для одной записи дают два ** разных объекта Ruby), ваш пример ошибочен.Может быть, если вы предоставите более подходящий пример, в котором точно указано, что вы пытаетесь сделать, я могу помочь дальше. – deefour
OK дайте мне объяснение. используя 'inverse_of', я добрался до точки, где я могу получить исходный объект полета из Сидений, которые были получены с помощью' first' и 'last':' s1.flight.equal? s2.flight'. Но когда я получил Сиденье с условием (где), я больше не получаю первоначальный полет. Причина, по которой мне нужен исходный объект, заключается в том, что я использую его для некоторого простого кэширования некоторых результатов вычислений, и я хочу избежать перекомпоновки. – davidrac