私は3つのモデルがあります。ユーザー、ロール&割り当て。私はこれを行う、現在のユーザーのためのプロジェクトを選択するために、私の見解ではRails 3で特定の役割を持つユーザーにアクセスするにはどうすればよいですか?
assignment.rb
# == Schema Information
# Schema version: 20101117094659
#
# Table name: assignments
#
# id :integer not null, primary key
# created_at :datetime
# updated_at :datetime
# user_id :integer
# role_id :integer
#
class Assignment < ActiveRecord::Base
belongs_to :role
belongs_to :user
end
role.rb
# == Schema Information
# Schema version: 20101117094659
#
# Table name: roles
#
# id :integer not null, primary key
# name :string(255)
# created_at :datetime
# updated_at :datetime
#
class Role < ActiveRecord::Base
has_many :assignments
has_many :users, :through => :assignments
end
user.rb
# == Schema Information
# Schema version: 20110102225945
#
# Table name: users
#
# id :integer primary key
# email :string(255)
# encrypted_password :string(128)
# password_salt :string(255)
# reset_password_token :string(255)
# remember_token :string(255)
# remember_created_at :datetime
# sign_in_count :integer
# current_sign_in_at :datetime
# last_sign_in_at :datetime
# current_sign_in_ip :string(255)
# last_sign_in_ip :string(255)
# created_at :datetime
# updated_at :datetime
# username :string(255)
# f_name :string(255)
# l_name :string(255)
#
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable, and :lockable
devise :database_authenticatable, :registerable, :timeoutable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
has_and_belongs_to_many :projects
has_many :stages
has_many :uploads
has_many :comments
has_many :assignments
has_many :roles, :through => :assignments
def role_symbols
roles.map do |role|
role.name.underscore.to_sym
end
end
end
を:これは、モデルがどのように見えるかです
私のプロジェクトのコントローラでは、私が持っている:
def index
@projects = current_user.projects
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @projects }
end
<% if current_user.projects.exists? %>
<div class="data">
There are <%= current_user.projects.count %> projects.<br />
<table>
<% current_user.projects.each do |project| %>
<tr class="changer">
<td><%= link_to project.name, project %></td>
</tr>
<% end %>
</table>
</div>
<% else %>
<div class="no-data">
<%= image_tag('create-project-icon.png') %><br />
Create Project
</div>
<% end %>
:次にビューで、私はこれを行う
を終了
ユーザーには、Designer、Client、Admin、Superuserの4つの役割があります。
各デザイナーは複数のクライアントを持つことができます。各クライアントは複数の設計者に属することもできます。
は、だから私は、私は二つの質問があると思い:現在ログインしているユーザー(デザイナー)は(彼らは唯一、他のユーザータイプをクライアントを追加することはできません)クライアントを追加したい場合は- を、どのように私はやりますそれ?上記のコードサンプルで使用する構文は何ですか?クライアントを追加すると、彼をプロジェクト、ステージ、アップロード、コメントに関連付けることになります。理論的には、1人のデザイナーが複数のプロジェクトに所属し、複数のクライアントに所属します。
- ログインしているデザイナーのクライアントのみを取得するにはどうすればいいですか?つまり、current_userに関連付けられた役割クライアントを持つすべてのユーザーを選択するにはどうすればよいですか?
ありがとうございます。
デザイナーがクライアントを追加できるようにするにはどうすればいいですか?私は別の質問のコメントからdeclarative_authorizationを使用していると思いますが、この質問からは明らかではありません。また、他の不特定の関連を経由しない限り、ユーザーを設計のクライアントとして追加することを許可するユーザー間の関連はないようです。それはちょうど私かもしれないが、質問に答えるのに十分な明快さがあるようには感じない。 – Shadwell
右のShadwellの時点で、不特定の関連はありません。進歩する方法を見つけようとしています。まあ、デザイナーがクライアントを追加することについての質問は非常に良いものです。デザイナーが追加するユーザー(つまり、任意のユーザー)が常に「クライアント」という役割を持つという前提のもとで作業していました。しかし、それは疑問ではありませんでした。問題は...ユーザー(クライアント)が別のユーザー(デザイナー)が所有するプロジェクトに既に追加されている場合、それらのユーザーを取得するにはどうすればいいですか? – marcamillion
それでは、私はプロジェクトAに4人のユーザーとロールクライアントを持っています。 'SELECT * FROM users WHERE role = 'client'&Project = 'A''をどうすればいいですか? SQL文を一切実行することなく理想的には、Ruby/Railsコードのみを使用します。私は、認証のためにdecl_auth&deviseを使用しています。あなたの考えを聞くのが大好きです。 – marcamillion