嗨,我正在开发一个使用 devise 和 ActiveAdmin 的 Rails 3.2.9 应用程序。我有用户和公司等模型。我希望管理员从特定公司的注册用户列表中选择一位经理。
我的用户表有这些字段:id、用户名、电子邮件、company_id、密码等
我公司的表有:id、company_name、manager_id(这只是用户的 id)、created_at 等
我编写的以下代码显示了所有公司的用户。单击编辑后,我只希望该特定公司的用户显示在下拉列表中。
这是我的 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'
#THIS LINE NEEDS TO BE CHANGED
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
编辑1:
我添加了一个控制器,并按照 jeremy04 的建议进行了更改。在用户模型中添加一个方法并从该控制器的编辑操作中调用它。我现在收到一个错误,例如
NoMethodError in Admin::CompaniesController#edit
undefined method `[]' for nil:NilClass
Rails.root: D:/WS/som_new
Application Trace | Framework Trace | Full Trace
app/admin/companies.rb:9:in `edit'
我的公司.rb 文件现在看起来像这样
ActiveAdmin.register Company do
controller do
# This code is evaluated within the controller class
def edit
puts "IN EDIT"
#@user_with_companies=[]
@user_with_companies = User.users_with_company(params[:company][:name]).pluck(:username)
puts @user_with_companies
end
end
index do
some code...
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_with_companies #.map{|u| [u.username, u.id]}
end
f.buttons
end
结尾