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 ?