Я столкнулся с этой проблемой при тестировании. Предположим, у меня две модели: User и Post, где пользователь has_many: posts.
Я пытаюсь описать блок кода, который включает в себя что-то вроде этого:
user = User.find(123)
post = user.posts.find(456)
Я знаю, как издеваться над частями User.find
и user.posts
. user.posts
mock возвращает массив объектов Post. И когда он доходит до части .find(456)
, все ломается с исключением no block given
.
Итак, мой вопрос: что я возвращаю в результате user.posts
mock, так что метод .find(456)
работает на нем? User.first.posts.class
говорит, что это Array, но, очевидно, есть что-то большее, что заставляет работать называть AR-стиль. Меня не радует перспектива издеваться над методом find на возвращаемом объекте.
PS Прежде чем предлагать очевидный и хороший ответ о том, чтобы перестать насмехаться и использовать инвентарь/посев тестовой базы данных с необходимыми данными, вот схема уловки: устаревшая. Как пользователь, так и почта работают над представлениями базы данных без таблиц и меняют их так, чтобы они были таблицами в тестовой базе данных, мне кажется неправильным.