如何将变量传递给render_to_string?

Art*_*rty 35 ruby-on-rails render render-to-string

尝试执行以下操作

@message = render_to_string ( :sender => sender, :template => "template" )          
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*own 47

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

@m = render_to_string :template => "template", :locals => {:sender => sender}
Run Code Online (Sandbox Code Playgroud)

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

  • 我一直在尝试从模型中使用`render_to_string`.为了与实例变量一起使用,我不得不做`ActionController :: Base.new.render_to_string(:template =>"template",:locals => {:@sender => sender})` (9认同)
  • 刚刚注意到你试图在视图中以"@ sender"身份访问发件人.不确定你的原始代码,但是如果你使用locals语法,它将是一个局部变量(不是实例变量),并且将在没有`@`的情况下访问 (6认同)

Adi*_*ena 14

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

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

请注意:@user => value.


在Rails 5(atm in beta)中:

ApplicationController.render(
  file: 'path',
  assigns: { foo: 'bar' }
)
Run Code Online (Sandbox Code Playgroud)

更多这里


小智 5

尝试这个:

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