在respond_to json块中未定义局部变量

时间:2012-01-21 14:48:52

标签: ruby-on-rails rest routing

我有以下代码块来呈现表单。表单将根据请求的格式设置“动作”。

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 个答案:

答案 0 :(得分:1)

使用locals选项传递给render时,局部变量不会设置为实例变量。格式变量应该只是一个局部变量(format vs @format

你看到@format被定义的原因是因为这就是Ruby的工作原理。在将实例变量分配给值之前访问它们时,它们将返回nil:

@format # => nil
@format = 'value'
@format # => 'value'