rails + devise + cancancan + rolify - невозможно просмотреть информацию о пользователе в представлении индекса пользователя
Моя цель состоит в том, чтобы на панели навигации была включена опция меню User Admin, если текущий пользователь является администратором. Пользователь с правами администратора может выбрать это, и он будет перенаправлен на путь users_path, который в маршрутах rails:
users GET /users(.:format) users # index
В app/views/users/index.html.erb находится таблица, которая отображает имя пользователя и адрес электронной почты в настоящее время. Конечная цель также состоит в том, чтобы иметь флажок администратора, чтобы пользователь-администратор мог проверить это в отношении пользователя, чтобы изменить роль на "администратор" после того, как он будет отправлен этому пользователю. В основном это страница администрирования пользователей для администрирования других пользователей.
Однако на данный момент в таблице есть только поля имени пользователя и адреса электронной почты. Проблема в том, что в этой таблице нет данных. Это пусто. НО, когда я использую отладку, я вижу все данные на панели отладки, когда страница загружается. страница индекса пользователя с пустой таблицей, но панель отладки, заполненная данными пользователя
Вот как это в настоящее время настроено:
1) rout.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) класс канканских способностей
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 ответ
Нашел проблему. Я использовал attr_accessor в пользовательской модели и строгие параметры в user_controller.
attr_accessor устарел и заменен сильными параметрами в Rails 4. Вам не нужны оба. После удаления attr_accessor данные заполнили таблицу в представлении индекса пользователя.