1

J'ai une propriété modèle qui a des sous-classes en utilisant STI,différents itinéraires, mais en utilisant le même contrôleur pour les sous-classes de modèle dans Rails

et que je voudrais tous utiliser le même contrôleur avec seulement différentes vues partielles en fonction de la sous-classe .

Property 
Restaurant < Property 
Landmark < Property 

Il travaille trouver que je ne suis pas sûr de savoir comment discerner la sous-classe à l'intérieur du contrôleur pour rendre la vue correcte. C'est à dire./restaurants fonctionne et va au contrôleur de propriétés mais je ne peux pas dire qu'ils veulent la sous-classe Restaurant?

map.resources :restaurant, :controller => :properties 
map.resources :properties 

Répondre

5

Une façon simple de fi le problème serait de créer un sous-contrôleur:

class RestaurantsController < PropertiesController 
end 

Dans les itinéraires vous carte des restaurants au contrôleur de restaurants.

Mise à jour: Sinon, vous pouvez essayer quelque chose comme ça dans votre routes.rb:

map.resources :restaurants, :controller => :properties, :requirements => {:what => :Restaurant} 
map.resources :properties, :requirements => {:what => :Property} 

Ensuite, vous pouvez utiliser un filtre avant de vérifier params [: ce] et changer les comportements en conséquence.

Exemple:

class PropertiesController < ApplicationController 
    before_filter select_model 

    def select_model 
    @model = params[:what].constantize 
    end 

    def show 
    @model.find(params[:id]) 
    ... 
    end 

    ... 
end 
+0

oui, mais je voudrais les garder en utilisant le même contrôleur, avec seulement légèrement différentes vues partielles. – holden

+0

@holden: J'ai ajouté une autre solution qui pourrait fonctionner pour vous –

+0

J'ai essayé exactement la même chose, bien que j'ai utilisé: sous-classe au lieu de: quoi mais cela ne semble pas fonctionner. params [: quoi] est nul et tout ce que j'obtiens forme params est "actionindexcontrollerproperties" de/restaurants ;-( – holden