2013-12-14 73 views
1

我使用rolify + activeadmin寶石。 我有2個資源:工作人員和用戶(默認設計表)。 工作人員是一個映射只讀表的模型,所以我不能寫在工作人員表中。 我與主動管理嘗試使用HAS_ONE和belongs_to的關聯,添加了對用戶的角色:rolify + activeAdmin通過表格添加角色

class User < ActiveRecord::Base 
    rolify 
    belongs_to :staff 
end 

class Staff < ActiveRecord::Base 
    has_one :user 
end 
在應用程序/管理/ staff.rb類

我有這樣的:

form do |f| 
     f.inputs "Add role" do |staff| 
     f.input :roles, :as => :select,  :collection => Role.global 
     end 
     f.actions 
    end 

So i want to add a role for a user using Staff admin resource. 
when i click on submit form button i have this error: 
NoMethodError in Admin/staffs#edit 

Showing app/views/active_admin/resource/edit.html.arb where line #1 raised: 

undefined method `roles' for #<Staff:0x00000005c6af70> 
Extracted source (around line #1): 

1: insert_tag renderer_for(:edit) 

回答

2

角色是用戶模型的一部分,而不是員工模型。相反,將您的表單添加到app/admin/user.rb,然後您將能夠爲用戶分配角色。此外,在用戶的表格中,您可以分配員工記錄。下面是一個示例表單:

# app/admin/user.rb 
form do |f| 
    f.inputs 'Name' do 
    f.input :name 
    end 

    f.inputs 'Add role' 
    f.input :roles, :as => :select, :collection => Role.global 
    end 

    f.inputs 'Staff' do 
    f.input :staff 
    end 

    f.actions 
end 

您還可以向委員會添加一個委託,以便能夠在Staff模型中原生讀取角色。

# app/models/staff.rb 
class Staff < ActiveRecord::Base 
    attr_accessible :name, :user_id 
    has_one :user 
    delegate :roles, :to => :user 
end