2011-08-19 67 views
1

查看输出我有轨佣工(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_elsehs_if

我想我应该从输出中删除{{/if}},但我无法找到帮助者的方式。

+0

您可以显示'hs_if'和'hs_else'的代码? – nathanvda

+0

@nathanvda https://gist.github.com/1156422 –

回答

1

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

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

你必须输入更多,但它可能会使代码更清晰。当然,你忘记关闭你的if语句是有危险的,但是你需要进行单元测试来抓这个,对不对?

+0

我希望找到更可靠,更类似于Haml语法的东西。无论如何感谢提示:-)。 –

+0

按照它的方式编写模板,不需要帮助者,它是一种选择吗?这样你就可以直接看到你的输出是什么。 – wanderfalke

0

我觉得条件表达式检查CURRENT_USER可以辅助使用(小胡子模板外):

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 
+0

对不起,但这不是解决方案,因为我的示例只是一个示例。不经意的模板可能会更复杂。 –

+0

无论如何,这个例子是JavaScript模板,所以我不能在条件下使用rails helpers,因为它会在前端呈现。 –

+0

对,它是客户端 – Anatoly