我正在尝试让我的用户模型在ActiveAdmin中工作,但它似乎只有在我将模型引用回用户模型本身时才会起作用,然后在我的应用程序中打破我的表单。
这种方法会破坏我的ActiveAdmin用户视图,但表单可以在我的应用中使用。
user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :vehicle
has_one :permit
has_one :faculty
has_one :emergency_contact
has_one :student
def admin?
roles == "admin"
end
def editor?
roles == "editor"
end
def standard?
roles == "standard"
end
end
user.rb
has_many :vehicle, class_name: 'User'
has_one :permit, class_name: 'User'
has_one :faculty, class_name: 'User'
has_one :emergency_contact, class_name: 'User'
has_one :student, class_name: 'User'
第二种方式是让我的ActiveAdmin用户视图工作(我知道这是错误的,只是不知道如何解决它)但它在我的应用程序中打破了我的表单。当ActiveAdmin中断时,我收到错误:
当我在ActiveAdmin中单击用户视图时undefined method 'vehicle_id_eq' for Ransack::Search<class: User
。
任何人对我如何修复模型以使ActiveAdmin正常工作有任何想法?
编辑**
管理员/ user.rb
ActiveAdmin.register User do
permit_params :roles
end
模型/ vehicle.rb
class Vehicle < ApplicationRecord
belongs_to :user
end
答案 0 :(得分:1)
ActiveAdmin正在尝试为User模型上的所有关联创建过滤器。这似乎包括您的has_many
关联(我猜也是has_one
)。这是一个非常简单的案例,AA似乎试图默认为has_one
或has_many
关联创建过滤器。它可能值reporting on Github。与此同时,有几种方法可以解决这个问题。
admin/user.rb
中的
ActiveAdmin.register User do
permit_params :roles
filter :name
filter :email
# or you can remove filters with => remove_filter :vehicles
#... add more filters that as you need.
end
通过这种方式,您可以使用实际用于查找单个或一组用户的过滤器。
join
或include
被引用的模型。如果您真的计划通过任何这些关联过滤用户,我只推荐此。如果没有,请使用上面提到的第一种方法。 admin/user.rb
中的
ActiveAdmin.register User do
permit_params :roles
controller do
active_admin_config.includes.push :vehicles, :permit #,... etc.
# IF YOU INCLUDE A `has_many`, you need to ensure you are not
# returning duplicate resources. So you need to overwrite
# the apply_filtering method
def apply_filtering(collection)
super.where(User.primary_key => collection)
end
end
end