Como usar o mesmo metodo em controllers diferentes...

23 views
Skip to first unread message

Vinicíus Luiz

unread,
Dec 28, 2009, 1:15:51 PM12/28/09
to rails-br
Ola pessoal,
Tenho dois controller em um projeto que vao usar um metodo em comum.
Gostaria de poder por esse metodo em um arquivo separado e compartilha-
lo para os dois controllers..

Alguem pode me da uma dica de como fazer isso ??

Bruno Grasselli

unread,
Dec 28, 2009, 1:19:57 PM12/28/09
to rail...@googlegroups.com
Uma das opções é colocá-lo no application controller, mas aí ele estará disponível para qualquer controller.

Quando eu tenho alguns controllers que vão ter métodos em comum entre outros, eu crio um controller superior a qual os outros controllers vão herdar. Criando um método desse controller ele fica disponível pra quem está herdando dele (geralmente crio um controller principal para cada namespace).

Ou você pode guardá-los em algum arquivo e dar um require.

2009/12/28 Vinicíus Luiz <mcp.vi...@gmail.com>

--

Você está recebendo esta mensagem porque se inscreveu no grupo "rails-br" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para rails-br+u...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/rails-br?hl=pt-BR.





--
Bruno Grasselli
Blog: http://brunograsselli.com.br
Twitter: http://twitter.com/grasselli

Rafael Rosa

unread,
Dec 28, 2009, 1:20:15 PM12/28/09
to rail...@googlegroups.com
Salve,

Coloque-o num helper, é o caminho mais limpo:


Wilker

unread,
Dec 28, 2009, 1:21:48 PM12/28/09
to rail...@googlegroups.com
Voce pode criar um modulo dentro da pasta lib, e entao incluir ele nas classes que voce quizer utilizar aquela funcionalidade
---
Wilker Lúcio
Gerente de Tecnologia
Caju Agência Digital
http://www.caju.nu
+55 81 87417674


2009/12/28 Bruno Grasselli <bruno.g...@gmail.com>

Catón

unread,
Dec 28, 2009, 1:21:44 PM12/28/09
to rail...@googlegroups.com
Coloque-o no application_controller.rb :)


Lucas Catón
Software Developer
Sotix / Lime / SHH
http://blog.lucascaton.com.br/


2009/12/28 Vinicíus Luiz <mcp.vi...@gmail.com>

Bruno Andrade

unread,
Dec 28, 2009, 1:22:20 PM12/28/09
to rail...@googlegroups.com
olá,

eu prefiro usar modulos, ao invés de herança, muito mas organizado. :)

Wilker

unread,
Dec 28, 2009, 1:22:51 PM12/28/09
to rail...@googlegroups.com
Rafael, helper seria se ele precisasse do metodo nas views, se ele realmente quer nos controllers, entao um module e oq ele precisa :)

---
Wilker Lúcio
Gerente de Tecnologia
Caju Agência Digital
http://www.caju.nu
+55 81 87417674


2009/12/28 Wilker <wilke...@gmail.com>

Catón

unread,
Dec 28, 2009, 1:27:07 PM12/28/09
to rail...@googlegroups.com
Bom, resumindo tudo que todo mundo falou:
  • Métodos comuns no controller: arquivo app/controller/application_controller.rb;
  • Métodos comuns nas views: arquivo app/helper/application_ helper.rb;
  • Métodos comuns no model: crie módulos dentro da /lib e faça 'require' onde precisar dele.

Lucas Catón
Software Developer
Sotix / Lime / SHH
http://blog.lucascaton.com.br/


2009/12/28 Wilker <wilke...@gmail.com>
Rafael, helper seria se ele precisasse do metodo nas views, se ele realmente quer nos controllers, entao um module e oq ele precisa :)

---
Wilker Lúcio
Gerente de Tecnologia
Caju Agência Digital
http://www.caju.nu
+55 81 87417674


2009/12/28 Wilker <wilke...@gmail.com>

Voce pode criar um modulo dentro da pasta lib, e entao incluir ele nas classes que voce quizer utilizar aquela funcionalidade
---
Wilker Lúcioapplication_controller

Gerente de Tecnologia
Caju Agência Digital
http://www.caju.nu
+55 81 87417674


2009/12/28 Bruno Grasselli <bruno.g...@gmail.com>

Uma das opções é colocá-lo no application controller, mas aí ele estará disponível para qualquer controller.
application_controller

Quando eu tenho alguns controllers que vão ter métodos em comum entre outros, eu crio um controller superior a qual os outros controllers vão herdar. Criando um método desse controller ele fica disponível pra quem está herdando dele (geralmente crio um controller principal para cada namespace).

Ou você pode guardá-los em algum arquivo e dar um require.

2009/12/28 Vinicíus Luiz <mcp.vi...@gmail.com>

Ola pessoal,
Tenho dois controller em um projeto que vao usar um metodo em comum.
Gostaria de poder por esse metodo em um arquivo separado e compartilha-
lo para os dois controllers..

Alguem pode me da uma dica de como fazer isso ??

--

Você está recebendo esta mensagem porque se inscreveu no grupo "rails-br" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para rails-br+u...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/rails-br?hl=pt-BR.





--
Bruno Grasselli
Blog: http://brunograsselli.com.br
Twitter: http://twitter.com/grasselli

--

Você está recebendo esta mensagem porque se inscreveu no grupo "rails-br" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para rails-br+u...@googlegroups.com.
Para obter mais opções, visite esse grupapplication_controllero em http://groups.google.com/group/rails-br?hl=pt-BR.

Bruno Azisaka Maciel

unread,
Dec 28, 2009, 1:32:02 PM12/28/09
to rail...@googlegroups.com
O melhor é sempre usar um Module e fazer include, no caso de não precisar usar determinado método em TODOS os controllers. Jogar no ApplicationController é uma prática um tanto arbitrária pois todos os controllers teriam acesso ao método porém de forma desnecessária.

abraço,
Bruno Azisaka Maciel

Vinicius Luiz

unread,
Dec 28, 2009, 1:41:54 PM12/28/09
to rail...@googlegroups.com
valeu pessoal por todo o esclarecimento,

att,

Vinicius Luiz
Skype/Yahoo: vinicius.luiz
MSN: vinic...@hotmail.com
Gtalk: mcp.vi...@gmail.com
Twitter: http://twitter.com/vinicius_luiz
Blog: http://viniciusluizz.wordpress.com

----------------------------------------------

           Analista Desenvolvedor - TI                
CETAM Ltda. - Centro de Tecnologia da Amazônia

when there is no place in hell, the dead walked the earth!


2009/12/28 Bruno Azisaka Maciel <br...@bubble.com.br>

Marcos Piccinini

unread,
Dec 28, 2009, 2:42:30 PM12/28/09
to rail...@googlegroups.com
Eu gosto de criar uma pasta em 'app/' geralmente 'lib' mesmo e :

 config.load_paths += %W( #{RAILS_ROOT}/app/lib )

Assim deixo a lib pra coisas ñ necessarias em runtime, o autospec e meu shortcut do emacs pra ir pro teste do arquivo funcionam. É o caso de qts coelhos vc qr matar na sua caixa d`agua.

Glauber Alex Dias Prado

unread,
Dec 28, 2009, 3:25:33 PM12/28/09
to rail...@googlegroups.com
Vinicíus Luiz <mcp.vi...@gmail.com> writes:

Você pode fazer um Helper method em app/helpers/application_helper.rb ou
extender a classe ApplicationController pois todos os seus controllers
herdam dela, mas acho que o helper é melhor.

Vinicius Luiz

unread,
Dec 28, 2009, 3:57:26 PM12/28/09
to rail...@googlegroups.com
Seria uma boa pratica colocar um arquivo .rb na pasta config/initializers, esse arquivo conteria um module com o metodo que to quendo usar, exemplo

module NewControllerMethods
  # um metodo qualquer...
  def per_page
   @per_page = 15
  end
end

e depois adicionar esse module dentro do ActionController::Base 

ActionController::Base.send(:include, NewControllerMethods)

So que assim o metodo ficaria disponivel para todos os controllers... mesmo assim, isso eh uma boa pratica com rails ??

att,

Vinicius Luiz
Skype/Yahoo: vinicius.luiz
MSN: vinic...@hotmail.com
Gtalk: mcp.vi...@gmail.com
Twitter: http://twitter.com/vinicius_luiz
Blog: http://viniciusluizz.wordpress.com

----------------------------------------------

           Analista Desenvolvedor - TI                
CETAM Ltda. - Centro de Tecnologia da Amazônia

when there is no place in hell, the dead walked the earth!


2009/12/28 Glauber Alex Dias Prado <sma...@gmail.com>

Paulo Patto

unread,
Dec 28, 2009, 10:32:32 PM12/28/09
to rail...@googlegroups.com
Só uma dúvida, essa questão não seria um caso de uso de AOP?

--
------------------------------------------------------------------------------------------------------------------------
Atenciosamente
Paulo Patto
Analista de TI
+55 (11)8217-3514
http://www.paulopatto.com
http://paulopatto.wordpress.com
------------------------------------------------------------------------------------------------------------------------
"Quis custodiet ipsos custodes?"
-- Decimus Iunius Iuvenalis .
------------------------------------------------------------------------------------------------------------------------
- Esta mensagem aborda um ponto de vista pessoal e não deve ser
interpretado como verdade absoluta. Por gentileza não corte seus
pulsos.
- Se por ventura o texto acima tenha-lhe passado a impressão de ofensa
a sua pessoa, credo, opinião ou qualquer outro tipo de atitude contra
sua pessoa, creio que esta talvez não tenha sido essa a real intenção.
- A resposta acima talvez tenha sido obtida em menos de cinco minutos
no Google.com.
- A duvida acima, talvez não tenha sido sanada em cinco minutos de
pesquisa ao Google.com.
------------------------------------------------------------------------------------------------------------------------

Maurício Linhares

unread,
Dec 28, 2009, 10:34:25 PM12/28/09
to rail...@googlegroups.com
Não, é apenas uma questão de organização de código :)

-
Maurício Linhares
http://codeshooter.wordpress.com/ | http://twitter.com/mauriciojr

2009/12/29 Paulo Patto <paulo...@gmail.com>:

Tulio Ornelas

unread,
Dec 30, 2009, 4:39:35 AM12/30/09
to rail...@googlegroups.com
Cara, na minha opinião, como a galera falou, é criar um modulo e incluir.

2009/12/29 Maurício Linhares <linhares...@gmail.com>

Vinicius Luiz

unread,
Dec 30, 2009, 7:28:44 AM12/30/09
to rail...@googlegroups.com
blz, valeu ae pessoal...

att,

Vinicius Luiz
Skype/Yahoo: vinicius.luiz
MSN: vinic...@hotmail.com
Gtalk: mcp.vi...@gmail.com
Twitter: http://twitter.com/vinicius_luiz
Blog: http://viniciusluizz.wordpress.com

----------------------------------------------

           Analista Desenvolvedor - TI                
CETAM Ltda. - Centro de Tecnologia da Amazônia

when there is no place in hell, the dead walked the earth!


2009/12/30 Tulio Ornelas <ocul...@gmail.com>

Marcos Tapajós

unread,
Dec 30, 2009, 8:15:08 PM12/30/09
to rail...@googlegroups.com
A ideia do módulo é ótima se for um método, se forem vários pense se não é melhor usar uma herança.

[]'s

2009/12/30 Tulio Ornelas <ocul...@gmail.com>



--
Marcos Tapajós 
mar...@tapajos.me
tap...@gmail.com
Mobile: +55 21 8709-8693
Skype: marcostapajos
Gtalk/MSN: tap...@gmail.com

Vinicius Luiz

unread,
Dec 31, 2009, 6:10:21 AM12/31/09
to rail...@googlegroups.com
blz marcos, valeu a dica!

att,

Vinicius Luiz
Skype/Yahoo: vinicius.luiz
MSN: vinic...@hotmail.com
Gtalk: mcp.vi...@gmail.com
Twitter: http://twitter.com/vinicius_luiz
Blog: http://viniciusluizz.wordpress.com

----------------------------------------------

           Analista Desenvolvedor - TI                
CETAM Ltda. - Centro de Tecnologia da Amazônia

when there is no place in hell, the dead walked the earth!


2009/12/30 Marcos Tapajós <tap...@gmail.com>
Reply all
Reply to author
Forward
0 new messages