JavaFree.org | RubyOnBr.org

Mais um artigo, dessa vez o Ronaldo ataca de código!

Acompanhar Mais um artigo, dessa vez o Ronaldo ataca de código! 10 posts, 4 participantes

Avatar Ronie Uliana 891 posts

http://rubyonbr.org/articles/2007/01/04/reaproveitando-controllers/

Após uma longa espera (culpa desse vosso zelador que tirou férias), o artigo do Ronaldo Ferraz está no ar. Ele fala sobre como usar reaproveitar as ações dos controllers através de herança. Coisas como autenticação e até mesmo um controller genérico para models simples.

Vale a pena, um saboroso artigo com sabor de código ;)

 
69077103@n00 Fernando Gomes 110 posts

Parabéns Ronaldo!
Muito bom o artigo, principalmente o seu método get_model, acabo utilizando reflection com o Object.const_get mas já aderi a nova maneira que aprendi com o artigo! E o coitado do processador do meu servidor tb tá te agradecendo :)
[]´s

 
Avatar Shairon Toledo 1428 posts

Coisas tão simples que no dia-a-dia não pensamos.

Isso me deu uma idéia, de fazer singletons para models constantes como ddd, estados, etc. Assim

Muito bom.

 
Avatar Ronie Uliana 891 posts

Fala Shairon

Você tb pode fazer lazy initialization assim:

O operador “||=” é muito útil, ele executa a atribuição na variável apenas se ela é nula :)

Editado: Não funciona se a variável for boolean, okay? Pq aí se ela for nula ou falsa a atribuição ocorre.

 
Avatar Shairon Toledo 1428 posts

É eu saco ‘||=’ eu uso unless por ter aprendido assim é vício.

 
Avatar Ronaldo 388 posts

Fernando, fico contente por você ter gostado. Eu realmente prefiro o get_model por razões de legibilidade, mas a performance é um ponto excelente. Eu adoro magia negra, mas em linguagens dinâmicas o preço é realmente mais caro.

 
69077103@n00 Fernando Gomes 110 posts

Só como sugestão e para manter o padrão do scaffold pode-se modificar o método list para:

[]’s

 
69077103@n00 Fernando Gomes 110 posts

So reiterando,
Pra funcionar com STI o não podemos usar o método class_name que retorna o nome da classe mãe, devemos usar o método name.

[]’s

 
Avatar Shairon Toledo 1428 posts

Pegando o barco, troquei o método get_model por uma variável de instância dentro de um singleton

Com a instância @model elimina-se o befor_filter :check_model e as sub classes de GenericController não precisa especificar se o nome do controller for o mesmo nome do model. Pode passar também a classe model definindo na herança.

ou

Temos que avaliar o custo disto ainda.

 
Avatar Ronaldo 388 posts

Nusga. Isso é que é preguiça. Bem, como eu sempre disse, é uma das três virtudes fundamentais do programador