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