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 !
Wise Owl
February 13, 2009, February 13, 2009 23:08, permalink
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
Fabien Jakimowicz
February 14, 2009, February 14, 2009 10:46, permalink
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
This is just a mess. It would be great to clean this up!
Thanks in advance.