2017-01-05 3 views
0

Я работаю реализовать тщеславия URL-адреса на основе учебника здесь: https://wesleyluyten.com/writing/vanity-urls-for-multiple-controllers-in-railsКак использовать RoutingError ActionController :: RoutingError

Чтобы сделать тщеславия URL, работать мне нужно использовать стойку маршрутизатор следующим образом:

class SlugRouter 
    def self.to(action) 
    new(action) 
    end 
    def initialize(action) 
    @action = action 
    end 
    def call(env) 
    params = env['action_dispatch.request.path_parameters'] 
    params[:action] = @action 

    sluggable = Slug.where('lower(url) = ?', params[:slug].downcase).first 
    model = sluggable.try(:sluggable_type) 
    raise ActionController::RoutingError.new('Not Found') if !model 

    controller = [model.pluralize.camelize,'Controller'].join 
    params[:controller] = model.pluralize.downcase 
    controller.constantize.action(params[:action]).call(env) 
    end 
end 

Проблема заключается в raise ActionController::RoutingError.new('Not Found') if !model, это не изящно обрабатывает ошибки маршрутизации. Как я могу корректно обрабатывать ошибки маршрутизации путем перенаправления к корневому ва флэш сообщение против того, что происходит сейчас Рельсы показывает страницу ошибки ш

ActionController::RoutingError (Not Found): 
lib/slug_router.rb:14:in `call' 

ответ

2

Try:

redirect_to root_path, notice: 'Unknown Route' if !model 

Или:

if !model 
    params[:controller] = 'index' 
    IndexController.action('index').call(env) 
else 
    ... 
end 
+0

возможно внутри класса, который не унаследован от 'ActionController :: Base'? – rony36

+0

попробуйте альтернативное решение, которое я разместил – emaillenin

+0

Я пробовал решение alt. Это предотвратило сообщение об ошибке rails, но в итоге загрузило индекс с неправильным URL-адресом, что вызовет головную боль SEO. Как я могу заставить его просто перенаправить на URL-адрес, например '/' или '/ 404' для целей seo ... спасибо – AnApprentice

Смежные вопросы