2012-05-09 4 views
2

未定義の予期せぬ$:これは、コードの実行ルビー:(evalの):1:構文エラー、私は次の構文エラーになっています

(eval):1: syntax error, unexpected $undefined 
$#<MenuBuilder:0x007fccee84e7f8> = #<MENUBUILDER:0X007FCCEE84E7F8> 
^ 

です:

_main_menu.html.hamlを

#main-menu 
    = menu do |m| 
    = m.submenu "Products" do 
     = m.item "Products", Product 

builders_helper.rb

module BuildersHelper 
    def menu(options = {}, &block) 
    MenuBuilder.new(self).root(options, &block) 
    end 
end 

男性u_builder.rb

これは、rootメソッドでキャプチャ()の呼び出しに失敗し
class MenuBuilder 
    attr_accessor :template 
    def initialize(template) 
    @template = template 
    end 
    def root(options, &block) 
    options[:class] = "jd_menu jd_menu_slate ui-corner-all" 
    content_tag :ul, capture(self, &block), options 
    end 
    def item(title, url, options = {}) 
    content_tag :li, options do 
     url = ajax_route(url) unless String === url 
     url = dash_path + url if url.starts_with?("#") 
     link_to title, url 
    end 
    end 
    def submenu(title, options = {}, &block) 
    content_tag :li do 
     content_tag(:h6, title.t) + 
     content_tag(:ul, capture(self, &block), :class => "ui-corner- 
all") 
    end 
    end 
end 

content_tag :ul, capture(self, &block), options 

自己のMenuBuilderのインスタンスを参照し、私はブロックは、他のパラメータとして渡されることを肯定しています。ブロック文にputs文を投げると?それは実行されますが、上記のcontent_tag行は渡されません。

+0

異なるコードブロックを別々のコードブロックに分けてください。私たちが読みやすくするために、それらの間に改行を入れてください。ありがとう。 –

+0

okコードブロックを再フォーマットしました – JohnMerlino

答えて

0

the capture helper methodのように問題が発生しているようです。

このメソッドは、ビューコードのブロックを受け取り、ビューの別の場所で使用できる変数に割り当てます。 http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-capture

はあなたが実際に実行キャプチャコードにブロックを渡していることを確認です:

は、ここでの詳細情報は?

あなたはこのような何か考えるかもしれません:

content_tag :li do 
    if block_given? 
    content_tag(:h6, title.t) + 
    content_tag(:ul, capture(self, &block), :class => "ui-corner-all") 
    else 
    content_tag(:h6, title.t) # whatever is appropriate if there's no block passed 
    end 
end 
+0

私はそれをチェックして、正しい場合は正しくマークします。ありがとう。 – JohnMerlino

+0

私は試しましたが、それでも同じエラーが出ます。ブロックが与えられていると私は肯定的です。そして、あなたが上でサンプリングしたコード部分は、それほど遠くにさえしていません。 – JohnMerlino

0

さて、私はこの問題を抱えていた、と私はそれを修正する方法を考え出したと思います。この問題は、おそらくKernel.captureをオーバーライドしているActiveRecordに導入されたバグです。私が見つけた解決策は、クラスレベルのキャプチャの代わりにヘルパーモジュールのキャプチャを使用することです。だからあなたの場合、content_tag :ul, capture(self, &block), optionsと呼んでいるところで、代わりにcontent_tag :ul, @template.capture(self, &block), optionsに電話して、ARからの厄介なものの代わりにヘルパーモジュールのキャプチャ方法を使用してみてください。

さらに詳しい情報についてはthesegithubissuesをご覧ください。

関連する問題