Where is error in this code

I have an action like

def create
if params[:ticket][:title].empty?
flash[:notice] = ‘Please fill fields marked with *’
redirect_to :action => ‘create_ticket_ui’
else
@contact_id =
ContactEmailAddress.get_contact_id(params[:contact_email][:email])
begin
ActiveRecord::Base.transaction do
#Now create a new sd ticket
ServiceDesk.create_ticket(@contact_id,params[:ticket])
end #transaction end
end #begin end
rescue #here is the problem
end #outer if else end
end

 My problem is when I start typing rescue as above IDE shows Syntax

error.Could you please help me to solve this? What I tried is to get the
error in transaction rescued Already inside the model also I have placed
the code in transaction begin end block and re raised any exception from
there

Thanks in advance
Sijo

Hi
Thanks for your reply. But I did not understand what you mean by
superfluous end…But the problem solved when I use begin end for the
whole action instead of else part only…So still dont know why Syntax
error at first

Sijo

Kind of fixed version:

def create
if params[:ticket][:title].empty?
flash[:notice] = ‘Please fill fields marked with *’
redirect_to :action => ‘create_ticket_ui’
else
@contact_id =
ContactEmailAddress.get_contact_id(params[:contact_email][:email])
begin
ActiveRecord::Base.transaction do
ServiceDesk.create_ticket(@contact_id,params[:ticket]) #Now create
a
new sd ticket
end
rescue
end
end

The reason why your editor says it’s wrong is a superfluous end before
the
rescue clause.

There are a couple of other things you want to change here as well, but
that
depends on your implementation.

  • Use ActiveRecord validations to tell the user which field the error
    was
    on. This also means you can be very specific about what can go into
    each
    field.
  • Redirect on successful creation of ticket, not on failure (that way
    the
    fields can remain filled out)

Here is a version somewhat easier to work with. I don’t know how
ServiceDesk.create_ticket works, so I modified it to new_ticket (which
doesn’t actually save the ticket that has been created, just returns
it).

def create
if request.post?
@contact_id =
ContactEmailAddress.get_contact_id(params[:contact_email][:email])
@ticket = ServiceDesk.new_ticket(@contact_id, params[:ticket])

if @ticket.save
  redirect_to :action => 'create_ticket_ui'
  return
end

end

@ticket ||= ServiceDesk.new_ticket
end

Hope this helps.

Cheers,
Morgan G…

2008/11/4 Sijo Kg [email protected]

 begin

error.Could you please help me to solve this? What I tried is to get the

–

Morgan G. - Just Landed
General Tel: +34 91 590 2611
[email protected]

http://www.justlanded.com - Helping people abroad!
30 countries, in up to 8 languages, more to come…

On Nov 4, 8:45 am, Sijo Kg [email protected] wrote:

Hi
Thanks for your reply. But I did not understand what you mean by
superfluous end…But the problem solved when I use begin end for the
whole action instead of else part only…So still dont know why Syntax
error at first

because the correct syntax is

begin
…
rescue
…
end
(you could have multiple rescue clauses etc)
not
begin
…
end
rescue
…
end

Fred

Hi
One more question related to this What I understood from your reply
was rescue placed inside the begin end block(Am I right?)…Could you
please tell how following working ?

begin

SDMailer.delive_to_send_mail_to_user(name,email_id,ticket_no) unless
email_id.blank?
end
rescue Exception => e:
puts e.to_s

And the o/p is (here i gave delive deliberately instead of deliver)
undefined method `delive_to_send_mail_to_online_user_on_ticket_creation’
for SDMailer:Class

Sijo

Hi
Thanks for the reply
Sijo

On 4 Nov 2008, at 10:00, Sijo Kg wrote:

rescue Exception => e:
puts e.to_s

And the o/p is (here i gave delive deliberately instead of deliver)
undefined method
`delive_to_send_mail_to_online_user_on_ticket_creation’
for SDMailer:Class

rescues can go in other places, eg

def some_method
…
rescue …
…
end

so for example you can do

def some_method
begin
…
end
rescue …
end
end

Although the use of a begin/end block doesn’t really add anything.

Fred