我有以下代码块来呈现表单。表单将根据请求的格式设置“动作”。
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
变量,但为空。我哪里出错?
答案 0 :(得分:1)
使用locals
选项传递给render时,局部变量不会设置为实例变量。格式变量应该只是一个局部变量(format vs @format
)
你看到@format被定义的原因是因为这就是Ruby的工作原理。在将实例变量分配给值之前访问它们时,它们将返回nil:
@format # => nil
@format = 'value'
@format # => 'value'