如何将变量传递给render_to_string?

时间:2010-09-15 02:08:10

标签: ruby-on-rails render render-to-string

尝试执行以下操作

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

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

5 个答案:

答案 0 :(得分:40)

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

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

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

答案 1 :(得分:11)

他在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' }
)

More here

答案 2 :(得分:2)

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

  

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

其中文件的名称为_partial_file.html.erb

答案 3 :(得分:2)

试试这个:

ac = ActionController::Base.new()  
ac.render_to_string(:partial => 'path to your partial',:locals => {:varable => your variables})

答案 4 :(得分:0)

在rails 4.0.2中,这有效:

render_to_string(partial: 'path/to/partial', locals: { argument: 'value'}