【问题标题】:How to pass variables to render_to_string?如何将变量传递给 render_to_string?
【发布时间】:2011-04-12 11:13:38
【问题描述】:

尝试执行以下操作

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 刚刚注意到您在视图中尝试以@sender 的身份访问发件人。不确定您的原始代码,但如果您使用 locals 语法,它将是一个局部变量(不是实例变量),并且将在没有 @ 的情况下访问
    • 您的解决方案确实有效。您可以按照您所说的传递本地变量并将它们作为局部变量而不是实例变量访问。
    • 我一直在尝试使用模型中的render_to_string。为了使用 with 作为实例变量,我必须这样做 ActionController::Base.new.render_to_string(:template => "template", :locals => {:@sender => sender})
    【解决方案2】:

    这是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

    【讨论】:

    【解决方案3】:

    试试这个:

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

    【讨论】:

      【解决方案4】:

      在 rails 4.0.2 这有效:

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

      【讨论】:

        【解决方案5】:

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

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

        文件的名称是_partial_file.html.erb

        【讨论】:

          猜你喜欢
          • 2015-09-12
          • 2021-05-25
          • 2018-12-28
          • 2017-01-24
          • 2018-05-17
          • 2012-04-20
          • 2018-03-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多