321bbdb120165eebbaf37e781d4ec71b

This is just a mess. It would be great to clean this up!
Thanks in advance.

def create
    @announcement =  current_account.announcements.build(params[:announcement])
    
    respond_to do |format|
      if @announcement.save
          if @announcement.sent_to == "squad"
            AnnouncementMailer.deliver_squad_announcement(@announcement, @current_account)
          elsif @announcement.sent_to == "everyone"
            AnnouncementMailer.deliver_general_announcement(@announcement, @current_account)
          elsif @announcement.sent_to == "tryout"
            AnnouncementMailer.deliver_general_announcement(@announcement, @current_account)
          end
        end
      else
        flash[:notice] = 'Announcement was successfully created.'
        format.html { redirect_to(@announcement) }
        format.xml  { render :xml => @announcement, :status => :created, :location => @announcement }
      else
        flash.now[:error] = 'Something went wrong.'
        format.html { render :action => "new" }
        format.xml  { render :xml => @announcement.errors, :status => :unprocessable_entity }
      end
    end
  end

Refactorings

No refactoring yet !

8a8525027d7b87525717b53146516c59

Wise Owl

February 13, 2009, February 13, 2009 23:08, permalink

No rating. Login to rate!
class Announcement < ActiveRecord::Base

  ANNONCEMENT_TYPES = {'squad'    => :deliver_squad_announcement,
                       'everyone' => :deliver_general_announcement,
                       'tryout'   => :deliver_general_announcement}

  def annonce_to(user)
    AnnouncementMailer.send(ANNONCEMENT_TYPES[self.sent_to], self, user)
  end

end

def create
  @announcement =  current_account.announcements.build(params[:announcement])
  
  respond_to do |format|
    if @announcement.save
      @announcement.annonce_to(@current_account)
      flash[:notice] = 'Announcement was successfully created.'
      format.html { redirect_to(@announcement) }
      format.xml  { render :xml => @announcement, :status => :created, :location => @announcement }
    else
      flash.now[:error] = 'Something went wrong.'
      format.html { render :action => "new" }
      format.xml  { render :xml => @announcement.errors, :status => :unprocessable_entity }
    end
  end
end
Be1e3ee645d23c95ba650c21bc885927

Fabien Jakimowicz

February 14, 2009, February 14, 2009 10:46, permalink

No rating. Login to rate!

You should use callbacks and exceptions ;)

I consider your current_account.announcements as Announcement model, and the current_account leads to a user model.

class Announcement < ActiveRecord::Base
  ANNONCEMENT_TYPES = {'squad'    => :deliver_squad_announcement,
                       'everyone' => :deliver_general_announcement,
                       'tryout'   => :deliver_general_announcement}

  belongs_to :user

  after_create :deliver_announcement

  def deliver_announcement
    AnnouncementMailer.send ANNONCEMENT_TYPES[sent_to], self, user
  end
end
def create
  @announcement = current_account.announcements.build(params[:announcement])
  @announcement.save!
  flash[:notice] = 'Announcement was successfully created.'
  respond_to do |format|
    format.html { redirect_to(@announcement) }
    format.xml  { render :xml => @announcement, :status => :created, :location => @announcement }
  end
rescue ActiveRecord::RecordInvalid
  flash.now[:error] = 'Something went wrong.'
  respond_to do |format|
    format.html { render :action => "new" }
    format.xml  { render :xml => @announcement.errors, :status => :unprocessable_entity }
  end
end

Your refactoring





Format Copy from initial code

or Cancel