非常简单的问题,但我似乎无法通过老式的 Google 找到答案。
错误:
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 用户,我犹豫是否要尝试解决这个问题并让网站变得容易受到攻击。提前致谢。
最佳答案
在 Rails 中,访问控制是在 Controller 层完成的,而不是在路由层上完成的。
路由只是为不同的参数集和请求 URL 定义匹配器。它们在 Rails 甚至开始处理请求之前就被处理了,它们对 session 一无所知。 Rails 甚至可以使用 YML 来定义路由,只不过 Ruby 更擅长 DSL。
如果您想要求用户登录,您可以使用:
class SomeController < ApplicationController
before_action :authenticate_user! # a Devise helper method
end
关于ruby-on-rails - Rails Devise Routes : If user signed in, 指向索引。否则,指向新用户 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30967456/