非常简单的问题,但我似乎找不到一个好的老式谷歌的答案。
错误:
undefined method `user_signed_in?' for #<ActionDispatch::Routing::Mapper:0x007fc6369320e8> (NoMethodError)
服务器甚至无法启动。
我的代码:
Rails.application.routes.draw do
devise_for :users, :path_prefix => 'u'
resources :users
devise_scope :user do
get "login", to: "devise/sessions#new", as: :login
get 'logout', to: 'devise/sessions#destroy', as: :logout
get 'user/edit', to: 'devise/registrations#edit', as: :change_password
end
resources :apps do
resources :elements, controller: 'apps/elements'
end
resources :elements do
resources :features, except: [:index], controller: 'apps/elements/features'
end
if user_signed_in?
root to: 'apps#index'
else
devise_scope :user do
root to: 'devise/sessions#new'
end
end
end
这项工作的最佳方法是什么?作为新的RoR用户,我犹豫是否试图解决它并使网站易受攻击。提前谢谢。
答案 0 :(得分:2)
在Rails中,访问控制是在控制器层完成的 - 而不是在路由层上。
路由只是为不同的参数集和请求网址定义匹配器。它们在rails甚至开始处理请求之前被处理,他们对会话一无所知。 Rails甚至可以使用YML来定义路由,除了Ruby在DSL上更好。
如果您想要求用户登录,您可以使用:
class SomeController < ApplicationController
before_action :authenticate_user! # a Devise helper method
end