使用全局变量从 render_to_string 输出内容
Output content from render_to_string using global variable
我在一个控制器中,我有一个方法可以将信息保存在全局变量中,如下所示
@var = "test"
现在,当我要渲染视图文件时,我正在使用以下代码
MyController.new.render_to_string(:template => 'folder/file.erb', :layout => false)
我遇到的问题是,在 file.erb 内部,由于某种原因无法访问变量 @var .代码如下:
<% @var.each do |v| %>
<% end if !@var.nil? %>
它返回 null 作为它的内容。我该如何解决这个问题?
我认为你应该将它作为本地传递:
MyController.new.render_to_string(:template => 'folder/file.erb', :layout => false, :locals => { :var => @var )
然后它将作为局部变量 var
访问(没有 @
)。
如果你想做一些 Rails 魔术,你应该在你的 @var
被定义的地方指向一个动作:
MyController.new.render_to_string(:template => 'folder/file.erb', :layout => false, :action => 'your_action_name')
所以 Rails 将能够在视图中重用您的变量
我在一个控制器中,我有一个方法可以将信息保存在全局变量中,如下所示
@var = "test"
现在,当我要渲染视图文件时,我正在使用以下代码
MyController.new.render_to_string(:template => 'folder/file.erb', :layout => false)
我遇到的问题是,在 file.erb 内部,由于某种原因无法访问变量 @var .代码如下:
<% @var.each do |v| %>
<% end if !@var.nil? %>
它返回 null 作为它的内容。我该如何解决这个问题?
我认为你应该将它作为本地传递:
MyController.new.render_to_string(:template => 'folder/file.erb', :layout => false, :locals => { :var => @var )
然后它将作为局部变量 var
访问(没有 @
)。
如果你想做一些 Rails 魔术,你应该在你的 @var
被定义的地方指向一个动作:
MyController.new.render_to_string(:template => 'folder/file.erb', :layout => false, :action => 'your_action_name')
所以 Rails 将能够在视图中重用您的变量