rails + devise + cancancan + rolify - 无法在用户索引视图中查看用户信息

时间:2017-06-19 09:12:19

标签: ruby-on-rails devise cancancan rolify

我的目标是,如果当前用户是管理员用户,则在导航栏中设置用户管理菜单选项。管理员用户可以选择此项,并将路由到rails_path中的users_path:

用户GET /users(.:format)用户#index

在app / views / users / index.html.erb中是一个显示当前用户名和电子邮件的表。最终目标是还有一个管理员复选框,以便管理员用户可以针对用户进行检查,以便在为该用户提交后将角色更改为“admin”。基本上是用户管理页面来管理其他用户。

但是,目前该表中只有用户名和电子邮件字段。问题是该表中没有数据可见。这是空白的。但是当我使用调试时,我可以在页面加载时看到调试面板中的所有数据。 user index page with table empty but debug panel populated with user data

以下是目前的设置方式:

1)routes.rb:

devise_for :users resources :users, only: [:index]

2)users_controller.rb

class UsersController < ApplicationController
  load_and_authorize_resource
  def index
    @users = User.all
  end
end

3)index.html.erb

<table id="user_list" class="display table table-striped table-sm table-hover" cellspacing="0" width="100%" >
  <thead>
     <tr>
       <th>Username</th>
       <th>Email</th>
      </tr>
   </thead>
   <tbody>
     <% @users.each do |user| %>
       <tr>
         <td><%= user.username%></td>
         <td><%= user.email %></td>
       </tr>
     <% end %>
   </tbody>
</table>

4)用户模型:

class User < ApplicationRecord
  rolify
  devise :database_authenticatable, :rememberable, :trackable, :registerable
  attr_accessor :username, :email, :password, :password_confirmation, :remember_me, :firstname, :lastname
  after_create :assign_default_role
  def assign_default_role
    self.add_role(:user) if self.roles.blank?
  end
end

5)application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_action :authenticate_user!
  protected
  def configure_permitted_parameters
    added_attrs = %i[username email password password_confirmation remember_me]
    devise_parameter_sanitizer.permit :sign_in, keys: added_attrs
  end
end

6)cancan能力等级

class Ability
  include CanCan::Ability
  def initialize(user)
    if user.has_role? :admin
      can :manage, :all
    else
      can :read, :all
    end
  end
end

有什么想法阻止用户数据在index.html.erb中显示?

1 个答案:

答案 0 :(得分:0)

发现了这个问题。我在用户模型中使用了attr_accessor,在user_controller中使用了强参数。

attr_accessor已被弃用,并被Rails 4中的强参数替换。您不需要两者。删除attr_accessor后,数据将填充用户索引视图中的表。