41

尝试执行以下操作

@message = render_to_string ( :sender => sender, :template => "template" )          

但是当在模板中访问@sender 时,结果是 nil:NilClass。仔细检查我是否传递了正确的变量,这完全没问题。也许还有其他方法可以将变量传递给 render_to_string?

4

5 回答 5

53

这可能是您正在使用的语法。尝试使用:locals参数:

@m = render_to_string :template => "template", :locals => {:sender => sender}

然后你只需要访问sender(没有@)作为模板内的局部变量。

于 2010-09-15T02:24:12.263 回答
17

这是他在对我有用的评论中写的Jason Kim的解决方案:

ActionController::Base.new.render_to_string(
  "user_mailer/welcome_email.html.erb", locals: { :@user => user}
)

请注意:@user => value一点。


在 Rails 5(测试版中的 atm)中:

ApplicationController.render(
  file: 'path',
  assigns: { foo: 'bar' }
)

更多在这里

于 2016-06-11T12:02:53.470 回答
4

试试这个:

ac = ActionController::Base.new()  
ac.render_to_string(:partial => 'path to your partial',:locals => {:varable => your variables})
于 2015-06-25T08:19:11.123 回答
2

在 rails 4.0.2 这有效:

render_to_string(partial: 'path/to/partial', locals: { argument: 'value'}
于 2014-02-14T10:08:03.257 回答
2

我试图在 render_to_string 中呈现不同格式的部分。真正对我有用的是:

render_to_string(:partial => 'partial_file.html', :locals => {:variable => variable}, :format => :html)

文件名在哪里_partial_file.html.erb

于 2014-09-10T14:36:49.413 回答