У меня есть три модели для пользователей. Пользователь, роль и назначения. Вот как выглядят модели:
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 %>
Пользователи имеют 4 роли: Дизайнер, Клиент, Администратор, Суперпользователь.
Каждый дизайнер может иметь несколько клиентов. Каждый клиент также может принадлежать нескольким дизайнерам.
Итак, я думаю, у меня есть два вопроса:
- Если вошедший в систему пользователь (дизайнер) хочет добавить клиента (они могут добавлять только клиентов, без другого типа пользователя), как мне это сделать? Какой синтаксис я буду использовать в соответствии с моими примерами кода выше. После добавления клиента я хочу связать его с проектами, этапами, загрузками и комментариями. Теоретически, у одного дизайнера будет несколько проектов, которые будут принадлежать нескольким клиентам.
- Как затем получить только клиентов, для дизайнера, вошедшего в систему. То есть, как выбрать всех пользователей с клиентом роли, связанным с current_user?
Спасибо.