您好我正在开发使用devise和ActiveAdmin的Rails 3.2.9应用程序。我有像用户和公司这样的模型。我希望管理员从特定公司的注册用户列表中选择一个经理。
我的用户表包含以下字段:id,username,email,company_id,password等
我公司的表有: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
EDIT1:
我添加了一个控制器,并按照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'
我的companies.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
端
答案 0 :(得分:0)
你几乎得到了它,我建议你在用户模型中创建SQL逻辑(创建一个传递公司名称的方法)或使用范围。
def self.users_with_company(company)
User.joins(:company).where("companies.name = ?", company)
end
然后在控制器的编辑操作中调用新方法:
@user_with_companies = User.users_with_company(params[:company][:name])
然后:
:collection => @ user_with_companies.map ..。等。