2012-03-06 4 views
1

Имея модель счета-фактуры, которая принадлежит пользователю, и пользовательскую таблицу, которая ассоциирует пользователь в качестве определенной роли или нескольких ролей:Rails - один пользователь несколько «ролей»?

class CreateInvoices < ActiveRecord::Migration 
def self.up 
create_table :invoices do |t| 
    t.string :po_number 
    t.datetime :invoice_date 
    t.datetime :date_received 
    t.datetime :date_approved 
    t.text :clerk_note 
    t.integer :clerk_id 
    t.integer :approver_id 
    t.text :approver_note 
end 
end 

class Invoice < ActiveRecord::Base 
    belongs_to :user 
end 

class CreateUsers < ActiveRecord::Migration 
    def self.up 
    create_table :users do |t| 
     t.string :first_name 
     t.string :last_name 
     t.string :username 
     t.string :email 
     t.boolean :account_clerk 
     t.boolean :approver 
     t.boolean :admin 
    end 
    end 

class User < ActiveRecord::Base 
    has_many :invoices 
end 

В записи счета-фактуры, как я Назначаю clerk_id и approver_id в зависимости от того набор ролей в пользовательской модели? В каждом счете есть клерк и утверждающий, но оба являются пользователями.

Аналогично, как назначить clerk_note для clerk_id и approver_note для approver_id? Я предполагаю в этом случае, я могу просто обратиться к current_user, так как пользователь, входящий в систему, будет тем, кто делает заметку, верно?

Я не уверен, что это называется, поэтому в моем Googling я не знал, что искать ... заблаговременно за вашу помощь.

+0

Вы могли бы на самом деле хотите, чтобы разделить клерк и утверждающие столбцы из таблицы счетов и создать таблицу invoice_users, которая имеет следующие столбцы: invoice_id, user_id, примечание, роль. Не уверен, что один и тот же пользователь может быть как утверждающим, так и клерком в вашей системе. –

+0

Спасибо за эту идею - да, пользователь может быть либо или и тем, и другим, утверждающим/клерком. Я могу использовать этот подход ... спасибо. –

ответ

0

Чтобы ответить на ваш оригинальный вопрос, используя текущие модели, вы можете просто создать свое представление для отображения разных полей на основе роли пользователя (это предполагает, что зарегистрированный пользователь находится в переменной экземпляра с именем @user).

<% if (@user.approver) then %> 
    <%= f.text_area :approver_note %> 
<% else %> 
    <%= f.text_area :clerk_note %> 
<% end %> 

Тогда в контроллере вы можете установить значение клерк идентификатора или утверждающего ид снова в зависимости от зарегистрированного пользователя.

if (@user.approver) then 
    @invoice.approver_id = @user.id 
else 
    @invoice.clerk_id = @user.id 
end 
+0

Спасибо, я попробую. –

Смежные вопросы