↓ Archives ↓

[Dica Rápida] Limpe seu Controller

Uma das boa praticas do Rails é Controller magro, Model gordo. Sei que esse assunto já é tratado a muito tempo, mais tem muita gente ainda que fica perdida.
Skinny Controller, Fat Mode é trazer toda lógica do negocio para os models, deixando seu controller e views limpas.

No seu controller você tem os seguintes Finds.


@activities = Activity.all( :conditions => { :close = 1},
                            :limit => 10,
                            :order => 'urgency DESC' )

@activities = Activity.all( :conditions => { :close = 0},
                            :limit => 10,
                            :order => 'urgency DESC' )

Uma forma de tirar isso do controller é usando named_scope
e deixando tudo no model.


class Activity < ActiveRecord::Base
  named_scope :activies,
              :conditions => {:close => 0}, :order => "urgency DESC"

  named_scope :activies_close,
              :conditions => {:close => 1}, :order => "urgency DESC"
end

E no seu controller é só fazer referencia aos named_scope.


class ActivitiesController < ApplicationController
......
  def index
    @activities = Activity.activies
    @activities_close = Activity.activies_close
  end
......
end
Compartilhar:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Tumblr
  • Twitter
[Dica Rápida] Limpe seu Controller

3 Comments

  • [...] This post was mentioned on Twitter by Marcio. Marcio said: [Dica Rápida] Limpe seu Controller http://bit.ly/aGY16d #new #post #rails [...]

  • jun 1st 201013:06
    by Tino Gomes

    Pode deixar “mais clean” o model, se colocar a ordenação como escopo default, no caso

    class Activity “urgency DESC”
    named_scope :activies, :conditions => {:close => 0}
    named_scope :activies_close, :conditions => {:close => 1}
    end

    Claro, que todas as consultas, agora virão ordenadas.

  • jun 2nd 201010:06
    by marciogm

    @Tino, essa de escopo default eu desconhecia.
    Mais uma técnica de refatoração para deixar a coisa mais clean

  • Leave a Reply