5

Hi I'm working on a Rails 3.2.9 app which uses devise and ActiveAdmin. I have models like users and company. I want admin to select one manager from list of registered users for a particular company.

My user's table has these fields : id,username, email, company_id, password etc

My company's table has : id, company_name, manager_id (this is nothing but id of user), created_at etc

After the admin has selected a manager for a company , i want his name(username from users table) to appear in the index page for company but now only manager_id is shown in index page. (On edit, the dropdown for selecting manager shows list of usernames)

Pls let me know how to use a query/joins statement to accomplish this

Here's my companies.rb file for admin

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

user_id の代わりに manager_id を使用したため、アクティブな管理者はそれを単一の整数値と見なします。

ID を使用して自動的にフェッチ レコードを取得するには、移行を生成し、列を user_id として変更します。

列名を変更したくない場合は、if を User レコードに次のように渡します。

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

@Bunty が言ったように、ユーザー レコードを manager 列に渡す必要があります。次のコードが機能しました!!

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

これにより、以前のように manager_id ではなく manager の名前が表示されるようになりました

于 2013-06-19T12:33:09.000 に答える
1

display_nameモデルでメソッドを定義することもできます。そうすれば、モデルの名前はすべてのビューで上書きされます。フォームをいじるよりも、それが好きです。

于 2018-07-24T11:59:03.403 に答える