2012-06-28 40 views
0

這個問題是類似這樣的一個刪除空白,但有一個額外的皺紋:在Haml的使用循環

Auto-removing all newlines from Haml output

假設你正在構建一個以逗號分隔的使用如下代碼的鏈接:

- foos.each_with_index do |foo, i| 
    = ', ' if i > 0 
    = link_to foo.name, foo 

如何避免在逗號前留空白?我沒有看到用現有的鱷魚操作員或surround/precede/succeed做到這一點。

有什麼方法可以重寫循環,以便您可以使用這些運算符?

回答

1

的link_to以來僅僅是返回字符串的幫手,你可以做一個單一的語句:

- foos.each_with_index do |foo, i| 
    = link_to(foo.name, foo) + (i < foos.length ? ', ' : '') 

不過,你可能要提取此代碼到一個輔助和寫入測試。

+0

適合我。我喜歡測試0而不是「長度」,但我可以只是翻轉連接。 –

+0

一些更正:(1)在所有b/c仍然得到空格後,翻轉「+」號不起作用。 (2)它應該是「長度 - 1」,而不是「長度」。 (3)你需要運行'raw'。 –

1

HAML配備了succeed方法可以在這裏使用:

- foos.each do |foo| 
    = succeed (foo == foos.last) ? '' : ', ' do 
    = link_to foo.name, foo 

使用字符串插值或表達式,可以有條件地顯示一個空字符串或逗號W/A的空間。

+0

我喜歡將'success'的參數設置爲空字符串的想法。我認爲你正在做一些額外的字符串工作,可以直接寫這個:'= succeed(foo == foos.last?'':',')do'。對? –

+0

是的,你可以。第一次嘗試時它錯誤地出現在我身上,但我可能有一些其他語法錯誤。剛剛開啓了我的Rails服務器並進行了測試適用於外插。 @PaulAJungwirth – Roi