2012-05-07 11 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

元のコードで '%'を削除したのかどうかはわかりませんが、その場合はそうでなければなりません。 – rubyprince

答えて

2
  1. このようなことは、部分的に実装する必要があります。または5を参照してください。
  2. <%あなたを表示しませんanyting。 あなたは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タグのスタイル/ IDSを。

+0

これは問題ありませんが、私のコンテンツには%li.classのようなものがあり、barのインスタンスからクラスを取得する必要があります。私はこの例がそれに対応しているとは思わない。 – randombits

+0

私の答えの最後に更新を見てください。 – jdoe

+0

これを正解としてマークしますが、この場合のバーは通常のActiveRecordモデルなどではなくハッシュです。だから、クラスルックアップがヘルパーで発生する必要があるので、正しいリスト項目クラスを取得する方法を理解する必要があります。今は0,1,2,3のような定数ですが、 'foobarclass' – randombits

2
  1. あなたのヘルパーの名前はdisplay_barないdisplay_eventです。

  2. あなたは@jdoeはあなたが使用することはできません述べたようおっと、慎重display_bar方法の内容を読んでいない代わりに<% %>

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

EDIT

=を使用する必要がありますRubyコードのHamlマークアップ構文

+0

それは、私が質問を入力するだけの誤植でした。 '' = ''を使うと動作しますが、私が使用しているconcat()の使用はまだ適切ではないと思います。 – randombits

関連する問題