2013-12-14 1 views
1

i m using rollify + activeadmin gems. У меня есть 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 

Вы также можете добавить делегат к сотрудникам, чтобы иметь возможность читать роли изначально в модели персонала.

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