РЕДАКТИРОВАТЬ:
Получил много ответов с разными подходами к решению проблемы, большое спасибо!
К сожалению, ни один из них не работал до сих пор.
Чтобы легко понять и воспроизвести сбой, я создал небольшой репозиторий Rails на GitHub. с пакетом Rspec.
Одна из спецификаций проходит (где презентатор инициализируется в представлении). Одна из спецификаций не работает (где презентатор инициализируется в контроллере).
Как заставить их пройти оба?
ОРИГИНАЛЬНЫЙ ВОПРОС НИЖЕ:
Это мой ведущий:
class UserPresenter
def initialize(user, vc)
@user = user
@vc = vc
end
def linkify()
#
# HERE IS THE PROBLEM
#
vc.link_to("foo") do
yield
end
end
end
Это мой контроллер:
Я инициализирую свой Presenter в контроллере, передавая контекст представления контроллера с представленной моделью.
class UserController
def show
@user = User.find(#.....
@presenter = UserPresenter.new(@user, view_context)
end
end
В моем шаблоне Slim я вызываю своего Presenter, чтобы поместить контент в ссылку:
[email protected] do
p "123"
Моя проблема в том, что я не могу передать блок из представления моему методу linkify
.
В коде с отмеченным выше комментарием переданный блок представляет собой все содержимое представления, а не блок p 123
.
Когда я инициализирую свой Presenter в представлении через: @presenter = UserPresenter.new(@user, self)
, он работает, как и ожидалось.
Как заставить метод linkify использовать предоставленный блок без инициализации презентатора в представлении?