ruby-on-rails - Rails Devise Routes : If user signed in, 指向索引。否则,指向新用户 session

标签 ruby-on-rails ruby if-statement devise routes

非常简单的问题,但我似乎无法通过老式的 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/

相关文章:

ruby-on-rails - 在 ruby​​ 中省略截断链接

javascript - 有人可以看看我遇到问题的一些 jQuery 吗?(setInterval,fadeIn/fadeOut)

javascript - 为什么在浏览器中打开网页时功能不执行?

mysql - 如何根据不同的列数据进行选择

ruby-on-rails - 设计编辑注册无法正常工作

ruby-on-rails - Heroku 部署 "Invalid RUBY_VERSION specified",昨天工作

ruby-on-rails - 检查电子邮件域是否有效

ruby - 如何打印有关 NET :HTTPRequest for debug purposes? 的信息

ruby - 删除警报使用 watir webdriver 确认 javascript

ruby - 从模块中访问类的包含命名空间