Personalmente uso le eccezioni molto spesso.
Li preferisco anche all’uso dei vari if nelle azioni CRUD.
Ecco un esempio che dovrebbe rispondere anche alla tua domanda.
def create
@domain = Domain.new(params[:domain])
@domain.save!
flash[:notice] = ‘Domain was successfully created’
respond_to do |format|
format.html { redirect_to(@domain) }
format.xml { render :xml => @domain, :status => :created, :location
=>
@domain }
end
rescue ActiveRecord::RecordInvalid
respond_to do |format|
format.html { render :action => “new” }
format.xml { render :xml => @domain.errors, :status =>
:unprocessable_entity }
end
end
Ecco un esempio invece più complesso che usa anche il rescue_from.
class MyController < ApplicationController
rescue_from RoboNet::Whois::Error, :with => :error
rescue_from Hostname::InvalidHostnameError, :with => :error
def run
@hostname = Hostname.fetch(params[:qstring])
@response = @hostname.query_whois
respond_to do |format|
format.html
format.js { render :layout => false }
end
rescue Timeout::Error
raise RoboNet::Whois::Error, “Execution timed out. The server tooks
to
long to respond.”
TODO: move into RoboNet class to avoid re-thrown
rescue ::Whois::Error => e
raise RoboNet::Whois::Error, e.message
end
end
Sono esempi live estratti da reali applicazioni, consiglio di vedere la
logica più che il codice in
sé.Il secondo caso merita particolare attenzione perché sfrutta decisamente a
fondo il sistema di convenzioni built-in in Rails.
– Simone
2009/8/4 Mattia L. [email protected]
http://lists.ruby-it.org/mailman/listinfo/ml
–
Simone C.
Site & Blog: http://www.simonecarletti.com
Email: [email protected]
LinkedIn: http://linkedin.com/in/weppos
Nick: weppos | Skype: weppos