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:
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <%= link_to 'New', new_contact_path %>
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':
J'ai crée une page 'externs.html.erb' pour afficher la liste des 'Externs'.
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 aussi ajouté cette ligne dans mes routes:
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 map.resources :contacts, :collection=>{:externs=>:get}
mais cela a généré une erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <%= link_to 'New', :controller=>'contacts', :action=>:new, :member_type=> 'intern' %>
Comment résoudre ce cas ?
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>
Partager