使用全局变量从 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 将能够在视图中重用您的变量