У меня есть две модели, подобные этой:
class Foo
has_many :bars
end
class Bar
belongs_to :foo
end
Проблема заключается в том, что моя компания приняла «обоснованное решение», разрешив дублирование идентификаторов во всех записях БД. Поэтому, если я вызову что-то вроде этого:
my_bar.foo
Если существует несколько Foo
записей с одинаковым идентификатором, то этот вызов вернет неправильную, потому что запрос SQL от получателя ассоциации:
SELECT `foos`.* FROM `foos` WHERE `foos`.`id` = 2625196 LIMIT 1
Итак, я хочу обновить свой метод получения ассоциации следующим образом:
class Bar
belongs_to :foo
def foo
Foo.where(id: foo_id, user_id: current_user.id).first
end
end
Этот тип работает, но не работает для несохраненных записей,и каждый раз вызывает запрос SQL.
Вопрос
Как правильно переопределить метод получения ассоциации?