Ruby on Rails - Activeadmin,同一模型的不同验证

Ruby on Rails - Activeadmin, different validation with the same model

我确实使用 activeadmin 注册了两次相同的模型:

ActiveAdmin.register Media, as: 'Picture' do
end
ActiveAdmin.register Media, as: 'Video' do
end

但我想根据类型进行不同的验证。我想要这个用于视频:
models/video.rb

validate :validate_video_count
def validate_video_count
    errors.add(:error, "Require minimum 1 video") if self.videos.size < 1
end

图片是这样的:
models/picture.rb

validate :validate_picture_count
def validate_picture_count
    errors.add(:error, "Require minimum 1 picture") if self.pictures.size < 1
end

你不做简单的原因是什么

ActiveAdmin.register Picture do
end
ActiveAdmin.register Media do
end

我想这会解决您的问题。

如果你必须注册超类,不幸的是因为activeadmin依赖的inherited_resourcesgem有bug,你需要强制实例化正确的子类,像这样:

controller do
  def create
    klass = Picture # or Video or another subclass
    set_resource_ivar(klass.new(permitted_params["media"]))

    super
  end

  def update
    # similar pattern here to #create
  end
end