2012-01-21 7 views
2

フォームをレンダリングする次のコードブロックがあります。フォームには、要求されたフォーマットに応じて「アクション」が設定されます。respond_to jsonブロックで未定義のローカル変数

respond_to do |format| 
    format.html { render "new", :locals => {:format => "html"} } 
    format.json do 
    render 'new.html', { 
     :locals  => {:format => "json"}, 
     :content_type => 'text/html', 
     :layout  => false 
    } 
    end 
end 

問題は:locals => {:format => "json"}です。 ブロックformat.htmlブロックは正常に動作しますが、format.jsonによってレンダリングされたフォームは@format変数が定義されていますが空白です。どこが間違っていたのですか?

答えて

1

ローカル変数は、localsオプションでレンダリングに渡されたときにインスタンス変数として設定されません。フォーマット変数はローカル変数(format vs @format)として利用できるようにする必要があります。

@formatが定義されているのは、それがRubyの仕組みだからです。インスタンス変数が値に割り当てられる前にアクセスされると、nilを返します。

@format # => nil 
@format = 'value' 
@format # => 'value' 
関連する問題