I have many "edit" actions in my project. If the url is like http://localhost/project/3/edit and someone enters http://localhost/project/3333333/edit the edit action will fails because it cannot find a project with id of 3333333. To combat this I am adding to every action like edit: rescue redirect_to :action => 'index' flash['errors'] = "That project cannot be edited." This works, however is there a way to do this globally or do I have to entered this for every action that could error in this way? I understand about using routes to narrow down what URL's can be typed, but this does not escape an error when a value entered is incorrect. Incidentally, I looked at the Typo code and could not see any error checking, not a rescue in sight. How do they do it in typo?
on 2006-04-28 12:59
on 2006-04-28 15:13
On Apr 28, 2006, at 3:59 AM, James Whittaker wrote: > flash['errors'] = "That project cannot be edited." > This works, however is there a way to do this globally or do I have to > entered this for every action that could error in this way? I > understand > about using routes to narrow down what URL's can be typed, but this > does > not escape an error when a value entered is incorrect. You could have a before_filter call a function that tests that the id in your URL is valid. If you also want to verify that the right person is attempting to edit it.. you could do that there as well. Hope that helps. Cheers, -Robby Robby Russell Founder & Executive Director PLANET ARGON, LLC Ruby on Rails Development, Consulting & Hosting www.planetargon.com www.robbyonrails.com +1 503 445 2457 +1 877 55 ARGON [toll free] +1 815 642 4968 [fax]
on 2006-04-28 15:19
James, take a look at this: http://rubyonrails.org/api/classes/ActionControlle... Implement the 'rescue_action_in_public' method in your controller (or in application.rb) to define behavior based on a common exception. You could display a 404, or whatever you want.
on 2006-04-28 15:19
Also check out the wonderful exception_notification plugin for ideas as to how you can use this to better suit your needs.