Create a gist now

Instantly share code, notes, and snippets.

Initializer to tweak auto-generation of partial_path based on rendering objects
# config/initializers/partial_path_override.rb
# Override possibly undesirable naming convention used by Rails to automatically determine
# the path to partial templates when you pass model objects to the render method
# by Obie Fernandez http://blog.obiefernandez.com/content/2011/05/rending-collections-of-heterogeneous-objects-in-rails-1.html
ActionView::Partials::PartialRenderer.class_eval do
private
def partial_path(object = @object)
@partial_names[object.class.name] ||= begin
object = object.to_model if object.respond_to?(:to_model)
object.class.model_name.partial_path.dup.tap do |partial|
# I chose to limit this hack to events objects in my app's activity stream
if partial.include?("_events")
# Example: turns "nomination_events/nomination_event" into "events/nomination_event"
# More importantly, don't prepend the controller path so that this feature can
# be used across namespaces and controllers
partial.gsub!(/\A\w+_/,'')
else
path = @view.controller_path
partial.insert(0, "#{File.dirname(path)}/") if partial.include?(?/) && path.include?(?/)
end
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment