2011-08-03 10 views
0

は、私は次のような方法があります:私は、メソッドの最初の行のコメントを解除した場合ハッシュに変数を使用するにはどうすればよいですか?私のRailsアプリで

def navigation_menu(items) 
    # raise items.class.to_s 
    # raise items.to_yaml 
    render partial: 'global/navigation_menu', locals: items 
end 

を、「ハッシュ」はitemsがハッシュであることを証明し、例外テキストに示されています。 2行目のコメントを外すと、ハッシュのメンバーが表示されるので、空ではないこともわかります。

comparison of String with :navigation_menu failed 

私はlocals: { dummy_key: 'dummy value' }locals: itemsを交換した場合、それが動作:メソッドは次のエラーで失敗することを

は、なぜ私は、明示的なハッシュの代わりに私のitems変数を使用することはできませんか?

答えて

1

あり、特定の場合は、しかしです:文字列が正しく解釈されるように失敗するとハッシュは、キーを持ちます。だから、ハッシュにsymbolize_keysを追加するために、この場合に必要です:

render partial: 'global/navigation_menu', locals: items.symbolize_keys 
2

ここにはRuby/Railsのnewbがありますが、私は同じ問題がありました。地元の人々はオプションのハッシュなので、あなたが渡すものは何でも:地元の人々はオプションのハッシュになります。

あなたがこの方法をコーディングする必要がある、とあなたが雄弁ルビーを読めば、それはなぜ述べて - パラメータを使用すると、中括弧を省略することができ、最後のハッシュでなければ...

render partial: 'global/navigation_menu', :locals => { :items => item } 

か、

を好む場合私は最初の例で括弧を使用しないで試していませんが、
render partial: 'gloabl/navigation_menu', locals: { items: items } 

中括弧は、いずれかの構文でそこに持っていますしかし、第二に、私はそれらが必要であると信じています。

は、このことができます願っています!

+0

。しかし、私はその中間的な 'items'変数を望んでいません。':('基本的には、 'local_assigns [:items]'をやることを避けようとしています。なぜ現場で作成するのではなく、直接ハッシュを渡すことができないのか分かりません'+ 1'には関係ありません。 – ClosureCowboy

1

私はあなたが「=>」矢印が含まれており、このようなハッシュ{}でそれを配置する必要があります推測:あなたは、私はしばしばこのように進んで、動作するはず書いたもの

render :partial => "global/navigation_menu", :locals => { :items => items } 
1

あなたは、単に2番目のパラメータとして地元の人々を渡すことができない理由は、あなたがrender()にオプションのハッシュを指定していることである - この場合には、あなたのハッシュ:partialを含みます。あなたはrenderためdocumentationcodeを見てみる場合は、メソッドは次のように定義されていることがわかります:あなたは部分ビットをレンダリングするために呼び出しを短くしたい場合は、

def render(options = {}, locals = {}, &block) 
... 
end 

今、そこにありますオプションなしで部分的にレンダリングショートカット:「何もオプションのハッシュが渡されないか、されている場合:更新指定は、デフォルトでは部分的にレンダリングし、地元の人々がハッシュとして二番目のパラメータを使用することです。」あなたは、次の操作を行うことができます。

render 'global/navigation_menu', items 

詳細はpartials documentationの「デフォルトのケースをレンダリング」チェックアウト。

現時点での私の回避策です
関連する問題