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

3

我使用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

And this for the picture :
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,但是你不是要在Rails模型中添加验证吗?如果这样做,一个简单的concern可能就足够了 :) 如果是这种情况,我可以提供帮助。 - radubogdan
在这些代码行中,self 是谁:self.pictures.sizeself.videos.size - lcguida
模型的属性 - KingOfBabu
@radubogdan 是的,这是在 Rails 模型内部。我已经指定了它。 - KingOfBabu
1个回答

1
什么是你不做更简单的原因?
ActiveAdmin.register Picture do
end
ActiveAdmin.register Media do
end

这应该可以解决你的问题。
如果你必须注册超类,不幸的是由于activeadmin依赖的inherited_resources gem中存在一个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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接