Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
# Customizing your Responder to always redirect to the collection path (index action).
class AppResponder < ActionController::Responder
protected
# Overwrite navigation_behavior to redirect to the collection_location.
def navigation_behavior(error)
if get?
raise error
elsif has_errors? && default_action
render :action => default_action
else
redirect_to collection_location
end
end
# Returns the collection location for redirecting after POST/PUT/DELETE.
# This method, converts the following resources array to the following:
#
# [:admin, @post] #=> [:admin, :posts]
# [@user, @post] #=> [@user, :posts]
#
# When these new arrays are given to redirect_to, it will generate the
# proper URL pointing to the index action.
#
# [:admin, @post] #=> admin_posts_url
# [@user, @post] #=> user_posts_url(@user.to_param)
#
def collection_location
return options[:location] if options[:location]
klass = resources.last.class
if klass.respond_to?(:model_name)
resources[0...-1] << klass.model_name.plural.to_sym
else
resources
end
end
end
# And now, just add it to your controller:
class ApplicationController < ActionController::Base
self.responder = AppResponder
end
# Customizing your Responder to always redirect to the collection path (index action).
class AppResponder < ActionController::Responder
protected
# Returns the collection location for redirecting after POST/PUT/DELETE.
# This method, converts the following resources array to the following:
#
# [:admin, @post] #=> [:admin, :posts]
# [@user, @post] #=> [@user, :posts]
#
# When these new arrays are given to redirect_to, it will generate the
# proper URL pointing to the index action.
#
# [:admin, @post] #=> admin_posts_url
# [@user, @post] #=> user_posts_url(@user.to_param)
#
def navigation_location
return options[:location] if options[:location]
klass = resources.last.class
if klass.respond_to?(:model_name)
resources[0...-1] << klass.model_name.plural.to_sym
else
resources
end
end
end
# And now, just add it to your controller:
class ApplicationController < ActionController::Base
self.responder = AppResponder
end
@ncr

This comment has been minimized.

Copy link

@ncr ncr commented Jun 26, 2010

Thank you for the presentation yesterday. Didn't know about ActionController::Responder before.

@josevalim

This comment has been minimized.

Copy link
Owner Author

@josevalim josevalim commented Jun 26, 2010

My pleasure! :D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment