如何使用rails 3中的活动管理员显示名称而不是id

时间:2013-06-18 11:10:17

标签: ruby-on-rails-3 join activeadmin

您好我正在使用设计 ActiveAdmin 的Rails 3.2.9 应用。我有像用户和公司这样的模型。我希望管理员从特定公司的注册用户列表中选择一个经理。

我的用户表包含以下字段:id,username,email,company_id,password等

我公司的表有:id,company_name,manager_id(这只是用户的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

3 个答案:

答案 0 :(得分:11)

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

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

如果您不想更改列名,请将if传递给用户记录,

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

答案 1 :(得分:2)

正如@Bunty所说,我们应该将用户记录传递给经理列。以下代码有效!!

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

现在显示管理员的名称,而不是像之前那样显示manager_id

答案 2 :(得分:0)

您还可以在模型上定义方法display_name。这样,模型名称将在所有视图中被覆盖。我不喜欢摆弄表格。