Различные маршруты, но с использованием одного и того же контроллера для подклассов модели в Rails - PullRequest
1 голос
/ 17 февраля 2010

У меня есть свойство Model, которое имеет подклассы, использующие STI,

и которое я хотел бы, чтобы все использовали один и тот же контроллер только с разными частями представления в зависимости от подкласса.Это работает найти, за исключением того, что я не уверен, как различить подкласс внутри контроллера для визуализации правильного представления.То есть./ рестораны работает и идет к контроллеру свойств, но я не могу сказать, что они хотят подкласс ресторана?

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

1 Ответ

5 голосов
/ 17 февраля 2010

Простой способ решить эту проблему - создать суб-контроллер:

class RestaurantsController < PropertiesController
end

На маршрутах вы сопоставляете рестораны контроллеру ресторанов.

Обновление: В качестве альтернативы вы можете попробовать что-то подобное в вашем routes.rb:

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

Затем вы можете использовать фильтр before для проверки параметров [: что] и соответственно изменить поведение.

Пример:

class PropertiesController < ApplicationController
  before_filter select_model

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

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

  ...
end
...