2016-03-23 2 views
0

Я использую Rails 4.2.5. Если пользователь вошел в систему, я хочу перенаправить их, если они посещают http://localhost:3000/ до http://localhost:3000/user_objects. Так что я добавил это мой конфигурационный файл/routes.rbПроблемы с попыткой перенаправить пользователя, если они вошли в систему

constraints(AuthenticatedUser) do 
    root :to => "user_objects" 
    end 
    root 'pages#index' 

Тогда у меня есть этот файл в LIB/authenticated_user.rb ...

class AuthenticatedUser 
    def self.matches?(request) 
    user_signed_in? 
    end 
end 

К сожалению, когда я вошел, и я доступ http://localhost:3000/, я получаю эту ошибку

NameError 

uninitialized constant AuthenticatedUser 

Любая идея, как я могу перенаправить пользователя на предложенной странице, если кто-то вошел в систему?

Edit: Мой конфиг/routes.rb файл следующим образом ...

resources :user_objects, except: :update do 
    member do 
     patch :create 
     put :create 
    end 
    get :find_by_user_object_and_day, on: :collection 
    get :find_totals, on: :collection 
    end 

    get "users/edit" => "users#edit" 
    resources :users 

    root 'pages#index' 

    get '/auth/:provider/callback', to: 'sessions#create' 
    get '/logout', to: 'sessions#destroy' 
    delete '/logout', to: 'sessions#destroy' 
+0

что вспомогательный метод для object_user, когда вы 'грабли routes'? – toddmetheny

+0

он немного запутался, пытаясь вырезать и вставить его, но я pu tin свой файл config/routes.rb, что очень просто. – Dave

ответ

2

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

if current_user 
    redirect_to user_objects_path #look up the rails helper  
end 
+0

Будет ли это работать в моем файле application_controller? Для rake-маршрутов у меня есть «root GET/pages # index» для корневой страницы – Dave

+0

Он будет работать в указательном действии контроллера страниц – toddmetheny

0

documentation на constraints рекомендует помещать пользовательские классы ограничений в lib/constraints.

В любом случае, для класса, который должен быть признан в routes, вы должны иметь его автозагрузку. Добавьте каталог, в котором ограничение заключается в список автозагружаемых каталогов в application.rb:

# config/application.rb 
# Custom directories with classes and modules you want to be autoloadable. 
config.autoload_paths += %W[... 
          #{config.root}/lib/constraints] 
+0

Я переместил этот файл в каталог ограничений и добавил код yoru, но когда я нахожусь в http: // localhost: 3000 /, он все же пытается отобразить страницы # index вместо перенаправления на «root: to =>« user_objects ». ' – Dave

+0

Я вижу, я признаю, что меня так отвлекла ошибка «неинициализированной константы», что я забыл следовать вашему корневому вопросу :). С другой стороны, я бы выбрал подход @ toddmetheny. – BoraMa

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