web-dev-qa-db-fra.com

Comment passer des variables à rendu_to_string?

Essayer de faire ce qui suit

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

Mais lorsque vous accédez à @Sender dans un modèle, il s'avère être nul: nilclass. Vérifiez si je passe la bonne variable et c'est totalement bien. Peut-être qu'il y a une autre façon de passer des variables à rendu_to_string?

35
Arty

Cela pourrait être la syntaxe que vous utilisez. Essayez d'utiliser le :locals argument:

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

Ensuite, vous avez juste besoin d'accéder à sender (sans @) comme une variable locale à l'intérieur du gabarit.

49
Peter Brown

Voici Jason Kim Solution Il a écrit dans un commentaire qui a fonctionné pour moi:

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

S'il vous plaît méritez le :@user => value bit.


In Rails 5 (ATM en version bêta):

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

plus ici

15
Adit Saxena

Essaye ça:

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

J'essayais de rendre un format différent de partiel à rendu_to_string. La chose qui a vraiment fonctionné pour moi était:

rendu_to_string (: partielle => 'partal_file.html' ,: locaux => {: variable => variable},: format =>: html)

où le nom du fichier était _partial_file.html.erb.

2
Gaurav Agarwal

In Rails 4.0.2 Cela a fonctionné:

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