1

私は3つのテーブルで作業しています。HABTMセットアップのusers、roles、およびroles_users。

すべてのユーザーとその役割を表示しようとしています。

user.rbモデル

class User < ActiveRecord::Base

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

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email,:username, :password, :password_confirmation, :remember_me,     :role_ids
  # attr_accessible :title, :body

  def role?(role)
    return !!self.roles.find_by_name(role.to_s.camelize)
  end

end

role.rbモデル

 class Role < ActiveRecord::Base
  attr_accessible :role_name
   has_and_belongs_to_many :users

end

users_controller.rbコントローラー

class UsersController < ApplicationController
 # GET /users
  # GET /users.xml

#load_and_authorize_resource

  def index
   #  @user = User.find(params[:id])
    #@user.roles
    @users = User.all
    @roles = Role.all
    respond_to do |format|
      format.html # index.html.erb
  format.xml  { render :xml => @users }
end
  end

  # GET /users/1
  # GET /users/1.xml

 def show
    @user = User.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @user }
    end
  end

新しいユーザーを作成して、そのユーザーに役割を割り当てることができます。ユーザーを編集して役割を変更できます。showを使用して、個々のユーザーの役割を確認できます。

問題は、すべてのユーザーとその役割を表示しようとしているindex.html.erbファイルにあります。

これがコードです。

../views/users/index.html.erb

ユーザーの一覧表示

<table>
  <tr>
     <th>ID</th>
    <th>Email</th>
    <th>Username</th>
    <th>Role    </th>
     <th>Role ID</th>>
  </tr>

  <% @users.each do |user| %>
    <tr>
     <td><%= user.id %></td>
         <%= current_user = user.id %>
      <td><%= user.email %></td>
      <td><%= user.username %></td>
     <td> <%= User.find(user.id).roles %> </td>
      <td><%= link_to 'Show', user %></td>
      <td><%= link_to 'Edit', edit_user_path(user) %></td>
      <td><%= link_to 'Destroy', user, :confirm => 'Are you sure?', :method => :delete %></td>
    </tr>
  <% end %>
</table>

<br />

これにより、次の出力が生成されます。

john_user@nomail.com    john     [#<Role id: 1, role_name: "basic_user", created_at: "2012-12-06 18:03:43", updated_at: "2012-12-06 18:03:43">] Show    Edit    Destroy

つまり、role_nameだけでなく、Roles行全体が表示されます。

User.find(user.id).roles.role_name、User.find(user.id).roles [1]、およびその他のいくつかの可能性を試しましたが、ロール名だけを表示する方法がわかりません。

'role_name'だけを次のように表示するための適切な構文は何ですか。

john_user@nomail.com    john     basic_user        Show   Edit  Destroy

ありがとう!

4

1 に答える 1

3

直接アクセスできます。

<td> <%= user.roles.collect(&:name).join(",") %> </td>
于 2012-12-07T20:42:38.027 に答える