Похоже, вы говорите, что если вы не можете найти страницу, принадлежащую хэшу, то перенаправьте на "/"
Что-то действительно вонючее в выполнении поиска ActiveRecord в ваших маршрутах.
Если вам нужно перенаправить на определенный контроллер в зависимости от типа общего ресурса, то я бы поместил это как отдельный контроллер с перенаправлением:
match "/:hash" => 'SharableController#redirect':constraints => { :hash => /[a-zA-Z0-9]{7}/ }
, а затем занялся поиском записи.и перенаправить на правильное действие контроллера оттуда:
class SharableController < ApplicationController
def redirect
@sharable = Sharable.find_by_sharable_type(params[:hash])
redirect_to controller: @sharable.sharable_type, action: 'show', id: @sharable.id
end
end
ИЛИ ... в зависимости от того, насколько похожи действия show:
class SharableController < ApplicationController
def redirect
@sharable = Sharable.find_by_sharable_type(params[:hash])
render template: "#{@sharable.sharable_type.pluralize}/show"
end
end
Если вы имеете дело только с GET-запросамиЛучше поменяйте местами спичку для получения кстати:
get "/:hash" => 'SharableController#redirect', :constraints => { :hash => /[a-zA-Z0-9]{7}/ }