3 개의 테이블로 작업하고 있습니다. HABTM 설정에서 사용자, 역할 및 역할을 정의합니다.레일 3, HABTM 및 데이터 표시
모든 사용자의 역할을 표시하려고합니다.
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.rbclass 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
나는 새 사용자를 만들고 그에게 역할을 할당 할 수 있습니다. 나는 사용자를 편집하고 그의 역할을 바꿀 수있다. 쇼를 사용하여 개별 사용자 역할을 볼 수 있습니다.
문제는 모든 사용자와 해당 역할을 표시하려고하는 index.html.erb 파일 때문입니다.
다음은 코드입니다. 그래서
[email protected] 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
대신 행 나에게 전체 역할을주고있다 :
../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 />
이이 출력을 생성 role_name의
나는 User.find (user.id) .roles.role_name, User.find (user.id) .roles [1] 및 몇 가지 다른 가능성을 시도했지만 역할 이름 만 가져 오는 방법을 알아낼 수 없습니다. 표시하는.
[email protected] john basic_user Show Edit Destroy
감사 : 그냥 'ROLE_NAME'는 같은 표시 얻을 수있는 올바른 구문은 무엇
!
감사합니다! 나는 collect 메소드를 시도했지만 & 또는 .join을 사용하는 것을 알지 못했습니다. 나는 가까이에 있었지만 고비를 극복 할 수 없다는 것을 알았다. – user1886476
괜찮 으면 내 대답을 확인하는 경우 작동합니다 :) – Lichtamberg
죄송합니다. 전에 스택 오버플로에 게시하지 마십시오. 다시 한 번 감사드립니다! – user1886476