我的目标是,如果当前用户是管理员用户,则在导航栏中设置用户管理菜单选项。管理员用户可以选择此项,并将路由到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中显示?
答案 0 :(得分:0)
attr_accessor已被弃用,并被Rails 4中的强参数替换。您不需要两者。删除attr_accessor后,数据将填充用户索引视图中的表。