2017-04-14 3 views
2

je l'ai fait enregistrer le même modèle deux fois avec activeadmin:Ruby on Rails - Activeadmin, validation différentes avec le même modèle

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

Mais je veux avoir une validation différente en fonction du type. Je veux que ce pour la vidéo:
modèles/video.rb

Et ceci pour l'image:
modèles/picture.rb

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

Je n » t travaillez avec ActiveAdmin mais n'ajoutez-vous pas les validations dans le modèle des rails? Si vous faites cela, une simple préoccupation pourrait suffire :) Je peux vous aider si c'est le cas. – radubogdan

+0

Qui est 'self' sur ces lignes:' self.pictures.size' et 'self.videos.size'? – lcguida

+0

Son attribut du modèle – KingOfBabu

Répondre

1

Quelle est la raison pour laquelle vous ne faites pas le plus simple

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

Cela permettrait de résoudre votre problème, je pense.

Si vous devez enregistrer les superclasse, malheureusement, à cause d'un bogue dans la gemme de inherited_resources sur lequel activeadmin dépend, vous devez forcer l'instanciation de la sous-classe à droite, comme ceci:

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