私は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
ありがとう!