Forum: Rails-ES No puedo acceder a una variable de instancia

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
asdasd a. (Guest)
on 2009-01-28 19:34
Hola a todos,

Llevo toda la tarde liado con un tema muy básico pero que no me deja
avanzar con mi aplicación en Rails. Tengo dos controladores, uno que
hereda del de Application y otro de este mismo, llamando a un método del
primero.

Os pongo el código:

----------
queue_controller.rb
----------
class QueueController < APIController
  before_filter :responds

  def select_by_cli_and_id
    #@result = QueueModel.find(:all, :conditions => ["cli_id_fk = ? and
id = ?", 198, 78])
    @result = ['aaa', 'bbb']
  end

  def select_by_cli_and_acvd_order
    @result = QueueModel.find(:all, :conditions => ["cli_id_fk = ? and
id = ?", 198, 78])
  end

  def select_by_cli_and_acvd_order_by_id_limit
    @result = QueueModel.find(:all, :conditions => ["cli_id_fk = ? and
id = ?", 198, 78])
  end

  def select_strategy_by_id
    @result = QueueModel.find(:all, :conditions => ["cli_id_fk = ? and
id = ?", 198, 78])
  end

  def select_by_cli_and_acdv_order_by_nombrecola
    @result = QueueModel.find(:all, :conditions => ["cli_id_fk = ? and
id = ?", 198, 78])
  end

  private
    def responds
      #super(['una cosa', 'otra cosa'])
      super(@result)
    end
end
----------

----------
api_controller.rb
----------
class APIController < ApplicationController
  def index
    redirect_to(:controller => 'home')
  end

  private
    def responds(result)
      @result = result
      respond_to do |format|
        format.html { @phpSerialized = PHP.serialize(@result) }
        format.xml { render :xml => @result }
      end
    end
end
----------

El caso es que intento pasarle la variable @result del primero al
segundo y nada, ni puto caso. Como véis, he probado a enviar un array
desde "responds" directamente (el que está ahora comentado) y lo recibe
sin problemas, así que el error está al intentar recuperar la variable
de "select_by_cli_and_id", ya que enviándolo desde ahí no lo recibe ni
para trás.

¿Me podéis echar una mano? Seguro que es una tontería, pero estoy
empezando con Ruby y me encuentro bastante perdido...

Gracias. Un saludo. :)
Andrés G. (Guest)
on 2009-01-28 19:48
(Received via mailing list)
has probado a recibir @result = result
desde un metodo que no sea private? Por probar...

Luego lo de nombrar asi los archivos: api_controller.rb (con barra baja)
No se si chocara con las convenciones de rails...otra idea..

El 28 de enero de 2009 18:34, Dahn 06
<removed_email_address@domain.invalid>escribió:
Raul M. (Guest)
on 2009-01-28 19:50
(Received via mailing list)
El día 28 de enero de 2009 18:34, Dahn 06
<removed_email_address@domain.invalid>
escribió:> queue_controller.rb
>      super(@result)
>    end
> end
> ----------
> class APIController < ApplicationController
>  private
>    def responds(result)
>      @result = result

Creo que a estas horas estoy un poco embotado pero veo algo raro: el
método de la clase padre también tiene acceso a esa variable de
instancia, ¿realmente necesitas pasársela como parámetro en lugar de
acceder a ella desde dentro del propio método?
Isaac Feliu Pérez (Guest)
on 2009-01-28 20:00
(Received via mailing list)
+1 a lo que comenta Raul.

Por otro lado, al llamar el metodo responds desde un before_filter,
realmente se está ejecutando ANTES de la llamada a la acción, por lo
que la variable @responds todavia es null.

deberias cambiar el befor_filter por un around_filter...

around_filter :send_result_to_responds

def send_result_to_responds
   yield
   responds(@result)
end

Saludos,
--
Isaac Feliu
asdasd a. (Guest)
on 2009-01-30 19:12
Muchas gracias a todos, ya lo he conseguido. :)

Al final lo he hecho llamando a la función de la clase padre
directamente, en vez de instaurar la variable y pasársela mediante un
filter. Era una tonteria, pues no estaba teniendo en cuenta la herencia.

Lo dicho: ¡gracias! :)
This topic is locked and can not be replied to.