1

我有一个模型属性,它有使用 STI 的子类,

并且我希望所有人都使用相同的控制器,根据子类只有不同的视图部分。

Property
Restaurant < Property
Landmark < Property

除了我不确定如何辨别控制器内的子类以呈现正确的视图外,它可以正常工作。IE。/restaurants 工作并转到属性控制器,但我不能说他们想要 Restaurant 子类?

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

1 回答 1

5

解决问题的一种简单方法是创建一个子控制器:

class RestaurantsController < PropertiesController
end

在路线中,您会将餐厅映射到餐厅控制器。

更新:或者你可以在你的routes.rb

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

然后您可以使用 before 过滤器来检查 params[:what] 并相应地更改行为。

例子:

class PropertiesController < ApplicationController
  before_filter select_model

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

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

  ...
end
于 2010-02-16T23:53:21.323 回答