2013-06-18 52 views
4

你好我正在它采用色器件ActiveAdmin一个Rails 3.2.9 应用采用主动管理显示名称,而不是ID。我有像用户和公司的模型。我希望管理员从特定公司的注册用户列表中选择一位经理。如何在轨道3

我的用户的表有以下字段:ID,用户名,电子邮件,COMPANY_ID,密码等

我公司的表有:ID,COM​​PANY_NAME,经理标识(这不过的用户ID),created_at等

管理员选择了公司的经理后,我希望他的姓名(用户名表中的用户名)出现在公司的索引页中,但现在只有manager_id显示在索引页中。 (上编辑,选择管理者的下拉菜单可显示用户名列表)

请让我知道如何使用查询/加入语句来完成这个

这里是我的companies.rb文件管理

ActiveAdmin.register Company do 
    index do 
    column "Company", :name 
    column :address 
    column "No. of Subscriptions", :no_of_licenses 
    column "Manager", :manager_id 
    default_actions 
    end 
    filter :name 

    form do |f| 
    f.inputs "Company Details" do 
     f.input :name 
     f.input :address 
     f.input :no_of_licenses, :label => 'No of Subscriptions' 
     f.input :manager_id, :as => :select, :collection => User.joins('LEFT OUTER JOIN companies ON users.company_id = companies.id').map{|u| [u.username, u.id]} 
    end 
    f.buttons 
    end 
end 

回答

2

正如@Bunty所说的,我们应该在用户记录传递给经理栏。下面的代码工作!

column "Manager" do |m| 
    usr = User.find(m.manager_id).username 
end 

现在这显示管理器的名称,而不是像MANAGER_ID前

9

由于您已经使用manager_id而不是user_id,因此活动管理员将其视为单个整数值。

要使用id自动获取记录,您可以生成迁移并将其更改为user_id。

如果你不想在更改列名,然后通过仿佛用户纪录,

column "Manager" do |m| 
    usr = User.find(m.manager_id) 
    link_to usr.title, admin_user_path(m.manager_id) 
end 
+0

感谢您的帮助!这工作除了链接错误和第一行是返回一个对象ID。我修改了这一点,它的工作原理。我会在我的答案更新 –