2

J'utilise Single-Table-Inheritance pour un projet de rails. Et je me demandais s'il était possible de partager des fonctionnalités pour certaines fonctions communes entre sous-classes en les implémentant dans la super-classe. Est-il également possible de recycler les vues de la superclasse? Ou devrais-je écrire de nouvelles vues pour les fonctions communes? Ce ne serait pas très sec. Quelle était l'approche DRY? Devrais-je modifier le routes.rb ou existe-t-il un autre moyen d'y parvenir de manière dynamique?les rails redirigent vers le modèle de superclasse si le modèle est manquant pour une sous-classe

Best, E.

Répondre

0

D'abord, vous pouvez certainement partager les fonctionnalités entre les sous-classes par la mise en œuvre au niveau superclasse - qui est l'un des grands tirages pour STI. En ce qui concerne la question vue: Je suppose que nous parlons de sous-classement d'un modèle, pas d'un contrôleur. Dans ce cas, un seul contrôleur (avec des vues normales) pour le modèle principal fonctionnera généralement bien pour toutes les sous-classes. Il y a quelques problèmes un peu délicats quand il s'agit des formulaires, et la création/modification cependant. En particulier, vous devrez extraire la sous-classe du modèle des paramètres et l'ajouter après avoir mis à jour tout le reste. Par exemple:

def create 
    citation_class = params[:citation].try(:delete, :type) 
    @citation = citations.new(params[:citation]) 
    @citation.type = citation_class 
    flash[:notice] = 'Citation was successfully created.' if @citation.save 

    respond_with @citation 
end