Me estoy perdiendo algo muy simple, pero no estoy seguro de qué. Tengo dos acciones en el mismo controlador AppProxy . Una acción, AppProxy#return_credit también se usa para POST datos a través de AJAX, y funciona muy bien:
def return_credit customer = Customer.find_by(email: params["email"]) @credit_amount = customer.credit_amount.to_f render json: @credit_amount, :status => :ok end La acción anterior funciona muy bien y devuelve @credit_amount muy bien. Sin embargo, cuando necesito usar @credit_amount en otra acción dentro del mismo controlador, AppProxy#credit que alimenta una vista, @credit_amount ha desaparecido y ahora está vacío.
def credit @credit_amount # if I do puts "#{@credit_amount}" here its empty, # and obviously same in view end También intenté poner attr_reader :credit_amount en este controlador, pero no ayuda.
¿Cómo puedo usar la variable @credit_amount en mi acción de credit ?
Como acción de credit ubicada en el controlador diferente, no puede compartir variables entre dos controladores de esa manera. Para este propósito, existe Model .
Actualizar:
Ha actualizado la pregunta y responde lo mismo, no puede compartir variables entre dos acciones ( solicitudes ) de esa manera. Puede mover la lógica a un método separado
def set_credit_amount customer = Customer.find_by(email: params["email"]) @credit_amount = customer.credit_amount.to_f end y use este método en before_action o llame directamente en acciones, sin embargo, no puede guardar la variable ( data ) en una acción ( solicitud ) y luego usarla en otra.
Si desea compartir datos entre dos acciones ( solicitudes ), debe almacenarlos en algún lugar, en sessions o en una base de datos NoSQL como Redis.
@credit_amount debe configurarse nuevamente.
Si tuviera que usar esto de nuevo:
customer = Customer.find_by(email: params["email"]) @credit_amount = customer.credit_amount.to_fEntonces @credit_amount tendría el mismo valor que en #return_credit. Si este es el valor que desea, le recomendaría crear un método privado al que puedan acceder todas sus acciones.