JavaFree.org | RubyOnBr.org

Ajuda para diminuir minha action create

Acompanhar Ajuda para diminuir minha action create 9 posts, 4 participantes

Avatar Mawcor 48 posts

Boa tarde pessoal, queria uma ajuda para diminuir minha action.

Essa action é responsavel por criar as minhas tasks no banco.

Ps. Só programei java antes de ruby/rails.

Obrigado pela ajuda e ensino.

 
Avatar Mereghost 1476 posts

Mawcor:

Dá pra melhorar bastante aí, já que tem repetição a dar com pau. Mas sem conhecer a estrutura da app fica um pouco difícil. Dá pra postar ao menos como os modelos envolvidos estão relacionados?

 
Avatar Mawcor 48 posts

Opa, vou postar como esta meus models entao:

Vlw!

 
Avatar nofxx 1960 posts

Bro, com uns controller desse nem desce pro play q ninguem vai qrer brincar com vc.

Principio/norma/convenção básica e irrefutável:

Controllers magros, models gordos.

Controller ñ precisava nem ter mudado, deixe toda a lógica nos models.

 
Avatar Mawcor 48 posts

Vlw pela dica nofx, mas me ajuda a dar um enxugada no codigo tbm?!

Abraço!

edit: Pow mereghost. Voce diminuiu 40% do meu codigo! rsrsrsrs show de bola amigo! Vivendo e aprendendo.

 
Avatar Urubatan 165 posts

Algumas sugestões que melhorariam o código na minha opinião:

  • O serviço retornar tasks que não pertencem a ele não iria acontecer, então esta verificação no código não é útil.
  • Adicionar uma lista de tasks no modelo User (se é este o nome do modelo do current_user), assim o código fica bem mais simples e a lista de tarefas a ser iterada deve diminuir
  • mover o create para dentro do service, um create_task para este serviço parece bem lógico, pdoeria receber o current_user e o hash de parâmetros …
  • Pelo código que esta no post, tu adiciona a task sempre com os mesmos parâmetros, a única excessão é se o usuário já tem uma task para aquele serviço

então o código poderia ficar assim

E só pra constar, se tiver mais de uma task na lista, o teu código original já ta quebrado, ele teria que verificar em toda a lista para verificar se o usuário já tem tasks criadas ou já solicitou serviços, e não fazer esta verificação e criar uma task se nenhuma das duas verificações for verdadeira a cada iteração do loop.

 
Avatar Urubatan 165 posts

PS.: que porquera é esta de line breaks no final de cada linha do código que escrevi?

 
Avatar Mawcor 48 posts

Obrigado pela ajuda Urubatan. Realmente o código fica bem mais legivel assim e mais MVC tbm. A proposito, comprei seu livro, estou lendo ele ainda. Muito bom.

 
Avatar Mawcor 48 posts

Fui tentar implementar o codigo acima no meu projeto. Mas surgiu um problema. Não sei como chamar esse novo método criado no service_controller.
Atualmente estou criando um novo task pela view new de task, que chama automaticamente a action create do task_controller.

Como chamar essa nova action que esta no service_controller quando eu aperto o botão submit?