У меня есть полиморфная ассоциация (не настоящая Rails) для реализации Commentable.Я хотел бы иметь возможность использовать одни и те же представления для всех комментариев, хотя.Для моих именованных маршрутов я просто хочу иметь возможность вызывать edit_comment_path
и заставить его перейти к моему новому методу.
Мои маршруты будут выглядеть примерно так:
resources :posts do
resources :comments
end
resources :pictures do
resources :comments
end
resources :comments
Прямо сейчасЯ переопределил edit_comment_path
во вспомогательном модуле, но вместо этого вызывается вызываемый resources :comments
.Я сохраняю resources :comments
, потому что я хотел бы иметь возможность получить прямой доступ к комментариям и некоторым миксинам, на которые я полагаюсь.
Вот мой метод переопределения в module CommentsHelper
:
def edit_comment_path(klass = nil)
klass = @commentable if klass.nil?
if klass.nil?
super
else
_method = "edit_#{build_named_route_path(klass)}_comment_path".to_sym
send _method
end
РЕДАКТИРОВАТЬ
# take something like [:main_site, @commentable, @whatever] and convert it to "main_site_coupon_whatever"
def build_named_route_path(args)
args = [args] if not args.is_a?(Array)
path = []
args.each do |arg|
if arg.is_a?(Symbol)
path << arg.to_s
else
path << arg.class.name.underscore
end
end
path.join("_")
end