2011-08-19 72 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