Rails - 单用户多个“角色?”

时间:2012-03-06 16:47:52

标签: ruby-on-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,因为登录的用户将是发出注释的用户,对吗?

我不确定这叫什么,所以在我的谷歌搜索中,我不知道该找什么...提前感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

要使用当前模型回答原始问题,您可以创建视图以根据用户角色显示不同字段(这假定登录用户位于名为@user的实例变量中)。

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

然后在您的控制器中,您可以根据登录用户再次设置职员ID或审批者ID的值。

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