Rails 问一个 helper 的写法

natsuki · 2012年03月13日 · 最后由 natsuki 回复于 2012年03月14日 · 3050 次阅读

假设我经常在 view 页面里面有如下代码

<%=content_for?(:block_name)? yield(:block_name):render(partial: "block_name_default")%>

于是我想把这段提取到一个 helper 里面去 大致是这样

module ApplicationHelper
    def cascading_block(*args)
        block_name,default_tpl = args
        content_for?(block_name)?yield(block_name):render(partitial:"default_tpl")
    end 
end




但是这个时候 yield 跟在 view 里面的 yield 不一样了,请问需要怎样处理这种情况?

你应该在 application.html.erb 的 block_name 这段这样写

<%= yield :block_name || render(:partial => "block_name_default") %>

直接使用 yield 不支持传递

@huacnlee 这样做貌似不行哦..第二个 render 始终没执行到

#3 楼 @natsuki 看看这个:http://stackoverflow.com/questions/6781407/rendering-a-content-for-block-in-a-helper

那个人说答案是在 helper 中再次调用 content_for(:block_name),我没有验证,你可以试试。

module ApplicationHelper
    def cascading_block(*args)
        block_name,default_tpl = args
        content_for?(block_name) ? content_for(block_name) : render(partitial:"default_tpl")
    end 
end

找到了 content_for 的文档,里面说的很清楚:http://apidock.com/rails/ActionView/Helpers/CaptureHelper/content_for

@daqing 多谢,非常正解 >_>

需要 登录 后方可回复, 如果你还没有账号请 注册新账号