从帮助程序更改rails视图输出

时间:2011-08-19 08:16:09

标签: ruby-on-rails haml handlebars.js

我有铁路助手(hs_ifhs_else):

= hs_if :current_user do
  Hello, {{ current_user/name }}!

  = hs_else do
    = link_to 'Sign In', sign_in_path

...生成把手模板:

{{#if current_user}}
  Hello, {{ current_user/name }}!
{{else}}
 <a href="/signin">Sign In</a>
{{/if}}

如果在{{#if current_user}} ... {{else}} ... {{/if}}中嵌套hs_else,我如何呈现hs_if

我想我应该从输出中删除{{/if}},但我找不到在帮助程序中执行此操作的方法。

2 个答案:

答案 0 :(得分:1)

我认为最简单的方法是为hs_if中的关闭if标记(即hs_endif)和删除{{/ if}}部分引入单独的方法。所以你可以这样写:

= hs_if :current_user do
  Hello, {{ current_user/name }}!
= hs_else do
  = link_to 'Sign In', sign_in_path
= hs_endif

您需要输入更多内容,但它可能会使代码更清晰一些。当然有一种危险,你忘记关闭你的if语句,但你还是会进行单元测试来捕获它,对吗?

答案 1 :(得分:0)

我认为检查 current_user 的条件表达式可以在helper中使用(在胡子模板之外):

module M::TemplatesHelper
  def hs_header(&block)
    if current_user
      "Hello, {{ current_user/name }}!"
    else
      link_to('Sign In', sign_in_path)
    end.html_safe
  end
end