Rotas diferentes, mas usando o mesmo controlador para subclasses de modelo em trilhos
-
21-09-2019 - |
Pergunta
Eu tenho uma propriedade modelo que tem subclasses usando STI,
e que eu gostaria que todos usassem o mesmo controlador com apenas diferentes visualizações parciais, dependendo da subclasse.
Property
Restaurant < Property
Landmark < Property
Funciona, exceto que não tenho certeza de como discernir a subclasse dentro do controlador para renderizar a visualização correta. Ou seja. /Restaurantes trabalha e vai para o controlador de propriedades, mas não sei dizer que eles querem a subclasse do restaurante?
map.resources :restaurant, :controller => :properties
map.resources :properties
Solução
Uma maneira simples de fi o problema seria criar um sub-controlador:
class RestaurantsController < PropertiesController
end
Nas rotas, você mapearia restaurantes para o controlador de restaurantes.
Atualizar: Como alternativa, você pode tentar algo assim em seu routes.rb
:
map.resources :restaurants, :controller => :properties, :requirements => {:what => :Restaurant}
map.resources :properties, :requirements => {:what => :Property}
Em seguida, você pode usar um filtro antes para verificar os parâmetros [: o quê] e alterar o comportamento de acordo.
Exemplo:
class PropertiesController < ApplicationController
before_filter select_model
def select_model
@model = params[:what].constantize
end
def show
@model.find(params[:id])
...
end
...
end