Rails - однопользовательские несколько ролей? - PullRequest
1 голос
/ 06 марта 2012

Наличие модели счета, принадлежащего пользователю, и таблицы пользователей, которая связывает пользователя с определенной ролью или несколькими ролями:

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, так как пользователь, вошедший в систему, будет делать заметку, верно?

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

1 Ответ

0 голосов
/ 06 марта 2012

Чтобы ответить на исходный вопрос, используя текущие модели, вы можете просто создать представление для отображения различных полей в зависимости от роли пользователя (предполагается, что вошедший в систему пользователь находится в переменной экземпляра с именем @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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...