domingo, 12 de maio de 2013

Rails: Definindo método Initialize no controller sem destruir o layout

Postado por DoctorRu (Will)

Normalmente na Ruby definimos o método initialize dentro de uma classe para formatar a passagem de parâmetros ao instanciar um novo objeto e também atribuir valores a variáveis.

Porém na Ruby on rails se utilizamos o método initialize dentro de um arquivo controller ocorre uma sobreescrita neste método que ja está pré definido, um dos problemas gerados ao tentar definir este método é que os layouts não são executados e nenhuma mensagem de erro específica é gerada.

Isso pode ser contornado de duas maneiras diferentes.

A primeira é logo após você definir suas variavéis efetuar a chamada ao método initialize da classe original através do super.
class MyClassController < ApplicationController

  layout 'myLayout'

  def initialize

    @var1 = val1
    @var2 = val2
    ...
  
    super

  end
end
ou utilize a segunda maneira com before_filter, esta instrução chamará automaticamente o método que você definir antes que qualquer outro método seja executado, funcionando normalmente como o initialize dentro de uma classe na Ruby.
class MyClassController < ApplicationController

  layout 'myLayout'

  before_filter :my_init_method

  def my_init_method

    @var1 = val1
    @var2 = val2
    ...

  end
end
Este post foi escrito ao som de Simple Minds - Don't You (Forget About Me)

0 comentários :

Postar um comentário