2012-05-07 23 views
0

我很難讓我的幫助程序顯示列表項。標記如下所示:Rails HAML幫助程序顯示列表項

- @bars.each do |bar| 
     <% display_bar(bar) %> 

實際助手如下所示:

module MyHelper 
    def display_bar(bar) 
    type = bar.type 
    concat(%li.type) 
    concat(%b some text) 
    concat(%i some more text) 
    end 
end 

什麼我錯在這裏做什麼?

+1

我不確定是否將它放在原始代碼中,在<%= display_event(bar)%>'中的'=',但是如果是這樣的話,情況應該如此。 – rubyprince

回答

2
  1. 這樣的事情必須通過partials來實現。或見5.
  2. <%不會告訴你任何。 你在Haml。這是ERB的東西(但即使在那裏它也沒有顯示任何東西:你忘記了=的標誌,它應該是<%=)。
  3. 關於concat(%li.type):你不能把你的標記放在你的Ruby代碼中。 Ruby對你的%li「代碼」一無所知。
  4. Amokrane Chentir已經提到。
  5. 你正試圖重新發明輪子。 Rails已經爲這種簡單的情況提供了非常好的幫手。

請看:

= content_tag_for(:li, @bars) do |bar| 
    %b= bar.title 
    %i= bar.id 

UPD:content_tag_for套風格/基於這使得它容易實現在未來造型/腳本當前模型實例每個li標籤ID。

+0

這很好,但我的內容有%li.class之類的東西,我需要從實例欄中獲取該類。我不認爲這個例子適合這個。 – randombits

+0

在我的答案結尾處查看更新。 – jdoe

+0

我會將此標記爲正確的答案,但在這種情況下,酒吧是一個散列,而不是一個常規的ActiveRecord模型或任何東西。所以我仍然需要弄清楚如何獲得正確的列表項類,因爲類查找需要在助手中發生。現在它只是一個常數,如0,1,2,3,我需要將它映射爲'foobarclass' – randombits

2
  1. 你的幫手的名字是display_bar不是display_event

  2. 您應該使用的=代替<% %>

    - @bars.each do |bar| 
        = display_event(bar) 
    

編輯

哎呀沒仔細看display_bar方法的內容,@jdoe提到你不能使用Haml代碼中的Haml標記語法。

+0

這只是我輸入問題時的一個錯字。使用''=''可以工作,但我使用concat()我相信仍然不正確。 – randombits