Разные маршруты, но использующий один и тот же контроллер для подклассов моделей в Rails

StackOverflow https://stackoverflow.com/questions/2277299

Вопрос

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

и я бы хотел, чтобы все использовали один и тот же контроллер только с разными частями представления в зависимости от подкласса.

Property
Restaurant < Property
Landmark < Property

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

map.resources :restaurant, :controller => :properties
map.resources :properties
Это было полезно?

Решение

Простым способом решения проблемы было бы создание субконтроллера:

class RestaurantsController < PropertiesController
end

В маршрутах вы должны сопоставлять рестораны с контроллером ресторанов.

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

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

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

Пример:

class PropertiesController < ApplicationController
  before_filter select_model

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

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

  ...
end
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top