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