A menos que esté procesando show.html.erb
desde la acción index
, también deberá configurar @some_instance_variable
en la acción show. Cuando se invoca una acción de controlador, llama al método de coincidencia, por lo que no se invocará el contenido de su método index
al utilizar la acción show
.
Si necesita @some_instance_variable
conjunto que es lo mismo, tanto en las acciones index
y show
, la forma correcta sería definir otro método, llamado por tanto index
y show
, que establece la variable de instancia.
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
Hacer el set_up_instance_variable
método privado evita que sea llamado como una acción de controlador si tiene rutas comodín (es decir, match ':controller(/:action(/:id(.:format)))'
)
Gracias @Emily. ¿Pero hay una forma de DRY-er de hacer esto? – Red
Gracias @Emily estaba buscando lo mismo. ¡Aclamaciones! – Aashish
Simplemente agregue 'before_action: set_up_instance_variable, only: [: show,: index]' al controlador. Eso ejecutará 'set_up_instance_variable' antes de las acciones que especifique. – domi91c