Sto usando il metodo Rails 5 ApplicationController.renderer.render
per eseguire il rendering all'interno di un modello. Ho bisogno di passare alcune variabili al mio layout che ho fatto usando l'opzione locals
; questa variabile è quindi disponibile nel layout se si accede direttamente, ma non tramite self
.Rails 5 rendering dall'esterno di un controller con ApplicationController.renderer.render non imposta variabili su self
Ecco come ho impostato il mio rendere
html_string = ApplicationController.renderer.render(
file: "/#{template_path}/base/show",
:formats => [:pdf,:html],
locals: {
:@routing_form => self,
:controller_name => controller_name,
:action_name => action_name,
:current_user => current_user
},
:layout => '/layouts/application'
)
Poi all'interno del layout che voglio fare qualcosa di simile.
<div id="foo" class="<%= self.action_name %>">
sono stato in grado di ottenere questo lavoro facendo cadere self
in questo caso particolare
<div id="foo" class="<%= action_name %>">
ma ora la mia preoccupazione è come vorrei impostare una variabile in modo che avrebbe funzionato correttamente con self
? Precedentemente stavo usando la gemma render_anywhere e questa è stata gestita usando rendering_controller.var = "value"
Che classe non 'self' appartiene? Suppongo che l'oggetto 'self' non abbia i metodi' controller_name', 'action_name' e' current_user' (si tratti di un controller?), Quindi si innesca per te (hai detto che stai eseguendo il rendering da "all'interno di un modello") – sequielo
Hai provato a 'assigns' invece di' locals'? – AlexN
@AlexN, sì; che non ha alcun impatto su questo particolare problema. – bigtunacan