【问题标题】:Rails , enum roleRails,枚举角色
【发布时间】:2016-01-16 23:07:04
【问题描述】:

使用用户模型创建枚举

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  enum role: [:user, :manager]
  has_many :tickets
end

当我以 user.manager 身份注册时,我得到错误

undefined method `manager?' for nil:NilClass

我的观点_header.html.haml

%div
  .navbar.navbar-fixed-top.navbar-inverse
    %ul
      -if user_signed_in?
        %li= link_to 'New ticket', new_ticket_path, class: 'btn btn-danger'
        %li= link_to 'Log out', destroy_user_session_path,
                                class: 'btn btn-primary',
                                method: :delete
      -elsif current_user.manager?
        %li= link_to 'All tickets', '#'
      -else
        %li= link_to 'Sign up', new_user_registration_path, class: 'btn btn-primary'
        %li= link_to 'Log in', new_user_session_path, class: 'btn btn-primary'

【问题讨论】:

    标签: ruby-on-rails ruby enums devise


    【解决方案1】:
      -if user_signed_in?
        # skipped
      -elsif current_user.manager?
        # skipped 
    

    您写的内容不合逻辑,因为current_user 仅在用户登录时定义。

    您的elsif 在没有用户登录 时被调用,因此显然会抛出错误,因为它正在调用nil 上的方法(没有current_user)。

    【讨论】:

      【解决方案2】:

      要添加@Andrey 的答案,您需要使用以下内容:

      %div
        .navbar.navbar-fixed-top.navbar-inverse
          %ul
            -if user_signed_in?
               = content_tag :li, link_to('New ticket', new_ticket_path, class: 'btn btn-danger')
               = content_tag :li, link_to('Log out', destroy_user_session_path, class: 'btn btn-primary', method: :delete)
               = content_tag :li, link_to('All tickets', '#') if current_user.manager?
            -else
              = content_tag :li, link_to('Sign up', new_user_registration_path, class: 'btn btn-primary')
              = content_tag :li, link_to('Log in', new_user_session_path, class: 'btn btn-primary')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-17
        • 1970-01-01
        • 2017-02-08
        • 2019-11-06
        • 2021-05-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多