【问题标题】:Devise and Rolify - Display all of users - roles -- Multiple RolesDevise and Rolify - 显示所有用户 - 角色 - 多个角色
【发布时间】:2015-08-01 15:35:03
【问题描述】:

我有一个显示用户和角色的视图。我可以让它显示所有用户和一个带有 user.roles.first.name 的角色。 我无法让它循环并检索所选用户的所有角色。 任何帮助都会很棒。

    <h1>Admin#users</h1>
    <p>Find me in app/views/admin/users.html.erb</p>
    <ul>
      <table class="table-bordered col-md-6 ">
      <% @users.each do |user| %>
          <tr>
            <td><%= link_to user.email, edit_user_path(user) %></td>
#guess a loop here .. unable to find how to show all of a users roles.
            <td><%= user.roles.first.name %></td>
# end loop
            <td><%= user.id %></td>
          </tr>
      <% end %>
      </table>
    </ul>

管理控制器:

    class AdminController < ApplicationController
      before_action :authenticate_user!
      authorize_resource :class => AdminController
      def dashboard
        @user = current_user
      end

      def users
        @users = User.all

      end
    end

用户类别:

    class User < ActiveRecord::Base
      rolify

      # Include default devise modules. Others available are:
      # :confirmable, :lockable, :timeoutable and :omniauthable
      devise :database_authenticatable, :registerable,
             :recoverable, :rememberable, :trackable, :validatable

      # Setup accessible (or protected) attributes for your model

     end

角色类:

    class Role < ActiveRecord::Base
      has_and_belongs_to_many :users, :join_table => :users_roles
      belongs_to :resource, :polymorphic => true

      validates :resource_type,
                :inclusion => { :in => Rolify.resource_types },
                :allow_nil => true

      scopify
    end

【问题讨论】:

    标签: devise roles rolify


    【解决方案1】:

    找到了一种使用集合的方法。代码如下

    视图/用户/index.html.erb

    <table class="table">
      <td>Email</td>
      <td>Role(s)</td>
      <td>Edit</td>
      <td>Delete</td>
    
    <% @users.each do |u| %>
        <tr>
    
          <td><%= "#{u.email}" %></td>
    
        <% joinroles = u.roles.collect{|r| r.name} %>
        <td> <%= joinroles.join(" ") %> </td>
         <!-- <td><%= "#{u.roles.collect{|r| r.name}}" %></td>-->
          <td><%= link_to_if(can?(:edit, User), "edit", edit_user_path(u.id)) {} %></td>
          <td><%= link_to_if(can?(:delete, u), "delete", u, :confirm => "Are you sure?", :method => :delete) {} %></td>
    
        </tr>
    <% end %>
    </table>

    【讨论】:

      【解决方案2】:

      我为此使用了一个助手:

      module ApplicationHelper
      
        def users_roles user
          roles = ''
          user.roles.each do |role|
            roles << "#{role.name} "
          end
          roles
        end
      
      end
      

      然后你可以把它放在你的视图中:

      <td> <%= users_roles(current_user) %> </td>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-06
        • 1970-01-01
        相关资源
        最近更新 更多