5

嗨,我正在开发一个使用deviseActiveAdmin的 Rails 3.2.9应用程序。我有用户和公司等模型。我希望管理员从特定公司的注册用户列表中选择一位经理。

我的用户表有这些字段:id、用户名、电子邮件、company_id、密码等

我公司的表有:id、company_name、manager_id(这只是用户的 id)、created_at 等

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

请让我知道如何使用查询/加入语句来完成此操作

这是我的company.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
4

3 回答 3

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 
于 2013-06-18T12:10:36.897 回答
4

As said by @Bunty, we should pass the user record to the manager column. The following code worked!!

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

This now displays the name of manager rather than manager_id like before

于 2013-06-19T12:33:09.000 回答
1

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

于 2018-07-24T11:59:03.403 回答