IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

Routes et Single-table inheritance


Sujet :

Ruby on Rails

  1. #1
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut Routes et Single-table inheritance
    Comment définir/utiliser les routes en cas de STI ?
    Avant j'utilisais RESTful routes, et pour créer un nouveau Contact je faisais sur ma 'new' page tout simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%= link_to 'New', new_contact_path %>
    Après il fallait gérer 2 types de Contacts différents. Donc j'ai ajouté la colonne 'type' dans la table 'Contacts' et créé 2 modèles:

    class InternalContact< Contact end
    class ExternalContact < Contact end

    Puisqu'il fallait afficher 2 listes de 'Contacts' séparément, j'ai gardé l'ancienne action 'index et ajouté une nouvelle méthode dans 'ContactsController':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    def index    
        @contacts = InternalContact.paginate :page => params[:page], :order => 'lastname', :per_page => 20
     
        respond_to do |format|
          format.html # index.html.erb
          format.js
          format.xml  { render :xml => @contacts }
        end
      end
     
      def externs
        @externs = ExternalContact.paginate :page => params[:page], :order => 'lastname', :per_page => 20
      end
    J'ai crée une page 'externs.html.erb' pour afficher la liste des 'Externs'.
    J'ai aussi ajouté cette ligne dans mes routes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    map.resources :contacts, :collection=>{:externs=>:get}
    Comment l'indiquer le type de 'Contact' à créer quand on clique sur le link 'New'? J'ai essayé de modifier ce link sur la page index come ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%= link_to 'New', :controller=>'contacts', :action=>:new, :member_type=> 'intern' %>
    mais cela a généré une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     NoMethodError in Contacts#new
     
    Showing app/views/contacts/new.html.erb where line #3 raised:
     
    undefined method `internal_contacts_path' for #<ActionView::Base:0x45c2ef8>
    Comment résoudre ce cas ?

  2. #2
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut
    J'ai résolu le problème. En fait, j'ai séparé tout ça et décidé de le gérer via 2 controlleurs différents, chacun pour son modèle vu que le traitement est différent ce serait mieux.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] Inheritance Single Table - methode Find
    Par G4nSta dans le forum Symfony
    Réponses: 1
    Dernier message: 18/10/2013, 11h15
  2. Ruby on Rails et Routes avec 2 tables reliées
    Par Miles Raymond dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 17/06/2009, 08h14
  3. Héritage (single-table inheritance)
    Par Javix dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 27/01/2009, 13h04
  4. Utilisation d'une Single Table Inheritance et des migrations
    Par redpopo dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 08/12/2008, 16h55
  5. [Single Table Inheritance] Documentation
    Par seb_asm dans le forum Design Patterns
    Réponses: 2
    Dernier message: 10/03/2005, 13h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo