ruby-on-rails – Rails Presenter块方法
发布时间:2020-12-17 03:48:43 所属栏目:百科 来源:网络整理
导读:编辑: 我有很多回答用不同的方法解决问题,非常感谢! 可悲的是,直到现在他们都没有工作. 为了便于理解和重现故障,我在GitHub上使用Rspec套件创建了一个小型Rails repo. 其中一个规格是传递(在视图中初始化演示者). 其中一个规格是失败的(主持人在控制器中初
编辑:
我有很多回答用不同的方法解决问题,非常感谢! 可悲的是,直到现在他们都没有工作. 为了便于理解和重现故障,我在GitHub上使用Rspec套件创建了一个小型Rails repo. 其中一个规格是传递(在视图中初始化演示者). 怎么让他们都通过? 下面的原始问题: 这是我的演示者: 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将内容放在一个链接中: =@presenter.linkify do p "123" 我的问题是,我无法将视图中的块传递给我的linkify方法. 在上面标记的带注释的情况下,传递的块是整个视图内容,而不是p 123. 通过以下方式在视图中初始化我的Presenter时:@presenter = UserPresenter.new(@user,self),它按预期工作. 如何使linkify方法使用提供的块,而不在视图中初始化演示者? 解决方法
因为如果要使用yield命令,则不能指定&块,因为现在您使用常规参数语法有效地接收块作为参数.
class UserPresenter def initialize(user,vc) @user = user @vc = vc end def linkify() # <-- Remove &block vc.link_to("foo") do yield end end end # ... # Somewhere else,assuming you have access to @presenter which is an instance of # UserPresenter # ... def show @presenter.linkify do # ... # do my view stuff here # ... end end show() # Now,if your "View" is nothing but a block that needs to get passed in # then you'd do this... def show(&block) @presenter.linkify do block.call() end end # This would be used this way: show(lambda { # ... # View stuff here # .. }) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |