2010-11-19 12 views
1

Rails 3を使用していくつかの液体テンプレートのカスタムタグを作成しようとしています:Rails 3のリキッドカスタムタグが見つかりません

という内容のlib /ディレクトリに 'liquid_tags.rb'を追加しました。
class UserControls < Liquid::Tag            
    def initialize(tag_name) 
    super 
    end 

    def render(context) 
    tag = "<b>TAG</b>" 
    end  
end 

Liquid::Template.register_tag('user_controls', UserControls) 

「{%user_controls%}」で私のビューにタグを取得しようとすると、タグが見つからないことがわかります。

アイデア?

ありがとうございます。

答えて

0

ファイルがロードされていますか?そうでなければ、register_tagは決して呼び出されません。私はそれをデバッグするために、実際にロードされていることを確認するためにregister_tagの上にputsステートメントをスローします。 register_tagを初期化子に移動することができます

+0

私は問題があると思われましたが、なぜlib /ディレクトリ内のファイルがロードされないのかわかりません。そのディレクトリには他のファイルがロードされています。 – Matt

+0

レール3のベータ版で自動的に読み込まれるlib /ディレクトリに関するいくつかの変更がありました。 libディレクトリをconfig/application.rb 'config.autoload_paths + =%W(#{config.root}/extras)'に追加する必要がありました。 –

0

私はそれが問題をロードしていないと思う - 私もそれを持っています。タグを使用すると、現在登録タグ印刷することができ、ロードされている:

config.autoload_paths << File.join(config.root, "lib") 
1

を/もしファイルの名前クラスに含まれるクラスの名前と一致します。あなたのファイルには 'liquid_tags.rb'という名前が付けられていますが、あなたのクラスの名前はUserControlsです...あなたのファイル 'user_controls.rb'の名前を変更すると、オートロードが開始されるはずです。

0

は、私はファイルだけで自動的にロードされていると信じて、この行を追加してみてくださいapplication.rb設定上の

Liquid::Template.tags.inspect 
3

ファイル内のクラスまたはモジュール名がファイル名と一致しない限り、autoload_pathsに追加したとしても、Railsは自動的にlibディレクトリに何もロードしません。自分自身のファイル内の各(私はそれらすべてを包むためにモジュールを使用してみましませんが、運)

class MyCustomTag < Liquid::Tag 
    def initialize(tag_name, params, tokens) 
     # do something 
    end 

    def render(context) 
     # do something 
    end 
    end 

すると、ちょうどlibディレクトリ内のカスタムフォーマッタを入れて、この問題をソートする

は、初期化子を作成しました( in config/initializers)、カスタムタグをLiquidに登録する必要があります。すなわち

関連する問題