I''ve created a plugin to generate error pages with a single function
call. The basic idea is that in your action you could call
error_forbidden and an error page would be rendered with the HTTP
status code 402. This works great so far when called from within an
action, but when I want to add the call to the "verfy" line, things
break:
verify :method => :post, :only =>
[ :create, :update, :destroy ], :render => { :text => error_invalid }
Generates the error message: "undefined method `error_invalid'' for
EventsController:Class"
I tried using "def self.included(base)" with "module
ClassMethods",
which seemed to work except I got an error about "render" not being
defined.
How can I make the methods visible to the controller outside the
actions? For some reason I haven''t been able to make it work for
both. Here''s the plugin:
####### init.rb #######
require ''error_page''
ActionController::Base.send :include, ErrorPagePlugin
####### error_page.rb #######
# ErrorPage
module ErrorPagePlugin
#
# The user is forbidden to perform this action
#
def error_forbidden(options={})
options[:title] = options[:title] || "You do not have
access to
perform that action."
options[:message] = options[:message] || "Make sure
you''re logged in
and have access to this feature."
options[:template] = "errors/forbidden.rhtml"
error_page(403, options)
end
#
# Invalid form method (get, put, delete, post)
#
def error_invalid(options={})
options[:title] = options[:title] || "Invalid Action"
options[:message] = options[:message] || "You have
just tried to
perform an action that is invalid for that item."
options[:template] = "errors/invalid.rhtml"
error_page(501, options)
end
#
# Generate error page
#
def error_page(status=200, options={})
@status = status
@title = options[:title]
@message = options[:message]
@override_h1 = true
@page_id = "pg_error"
tmpl = options[:template] || "errors/generic.rhtml"
render :status => status, :template => tmpl
end
end
Thanks,
Jeremy
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Do anybody have any thoughts on this? On Dec 31 2007, 7:12 pm, Mozmonkey <JeremyMail...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I''ve created a plugin to generate error pages with a single function > call. The basic idea is that in your action you could call > error_forbidden and an error page would be rendered with the HTTP > status code 402. This works great so far when called from within an > action, but when I want to add the call to the "verfy" line, things > break: > > verify :method => :post, :only => > [ :create, :update, :destroy ], :render => { :text => error_invalid } > > Generates the error message: "undefined method `error_invalid'' for > EventsController:Class" > > I tried using "def self.included(base)" with "module ClassMethods", > which seemed to work except I got an error about "render" not being > defined. > > How can I make the methods visible to the controller outside the > actions? For some reason I haven''t been able to make it work for > both. Here''s the plugin: > > ####### init.rb ####### > require ''error_page'' > ActionController::Base.send :include, ErrorPagePlugin > > ####### error_page.rb ####### > > # ErrorPage > module ErrorPagePlugin > > # > # The user is forbidden to perform this action > # > def error_forbidden(options={}) > options[:title] = options[:title] || "You do not have > access to > perform that action." > options[:message] = options[:message] || "Make sure > you''re logged in > and have access to this feature." > options[:template] = "errors/forbidden.rhtml" > > error_page(403, options) > end > > # > # Invalid form method (get, put, delete, post) > # > def error_invalid(options={}) > options[:title] = options[:title] || "Invalid Action" > options[:message] = options[:message] || "You have > just tried to > perform an action that is invalid for that item." > options[:template] = "errors/invalid.rhtml" > > error_page(501, options) > end > > # > # Generate error page > # > def error_page(status=200, options={}) > @status = status > @title = options[:title] > @message = options[:message] > > @override_h1 = true > @page_id = "pg_error" > > tmpl = options[:template] || "errors/generic.rhtml" > render :status => status, :template => tmpl > end > end > > Thanks, > Jeremy--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---