A meno che non si esegua il rendering di show.html.erb
dall'azione index
, sarà necessario impostare @some_instance_variable
anche nell'azione di visualizzazione. Quando viene richiamata un'azione del controllore, richiama il metodo di corrispondenza, pertanto il contenuto del metodo index
non verrà chiamato quando si utilizza l'azione show
.
Se è necessario @some_instance_variable
insieme alla stessa cosa in entrambe le azioni index
e show
, il modo corretto sarebbe quello di definire un altro metodo, chiamato da entrambi index
e show
, che imposta la variabile di istanza.
def index
set_up_instance_variable
end
def show
set_up_instance_variable
end
private
def set_up_instance_variable
@some_instance_variable = foo
end
Rendere il set_up_instance_variable
metodo privato impedisce di essere chiamato come un'azione di controllo se si dispone di percorsi jolly (vale a dire, match ':controller(/:action(/:id(.:format)))'
)
Grazie a Emily. Ma c'è un modo DRY-er per farlo? – Red
Grazie a Emily stavo cercando lo stesso. Saluti! – Aashish
Basta aggiungere 'before_action: set_up_instance_variable, solo: [: show,: index]' al controller. Ciò eseguirà 'set_up_instance_variable 'prima di qualsiasi azione specificata. – domi91c