Un jour, une gem

30/06/2012

Samedi c'est decent_exposure

Roulé à la main sous les aisselles !

Aujourd’hui on commence sur une notre fraîche en reprenant les mots de l’auteur de la gem : “Les controllers sont le dessous de bras humide de chaque application Rails”.

Bon ça colle bien avec la température du moment et c’est normal, car les variables d’instance ne sont pas censées servir d’interface entre le controller et la vue.

Donc avec cette gem au lieu d’avoir :

class Controller
  def new
    @person = Person.new(params[:person])
  end

  def create
    @person = Person.new(params[:person])
    if @person.save
      redirect_to(@person)
    else
      render :new
    end
  end

  def edit
    @person = Person.find(params[:id])
  end

  def update
    @person = Person.find(params[:id])
    if @person.update_attributes(params[:person])
      redirect_to(@person)
    else
      render :edit
    end
  end
end

On aura :

class Controller
  expose(:person)

  def create
    if person.save
      redirect_to(person)
    else
      render :new
    end
  end

  def update
    if person.save
      redirect_to(person)
    else
      render :edit
    end
  end
end

Et hop, un code refactorisé et qui est un peu moins humide ! Bien-sûr cela pourrait aussi fonctionner dans le cas où notre model person dépendrait d’un autre model. Mais ça, c’est une autre histoire :)

Les liens utiles

Sur une idée de @msadouni