hol*_*den 1 routing routes ruby-on-rails subclass single-table-inheritance
我有一个Model属性,它有使用STI的子类,
我希望所有人都使用相同的控制器,只有不同的视图部分取决于子类.
Property
Restaurant < Property
Landmark < Property
Run Code Online (Sandbox Code Playgroud)
除了我不确定如何辨别控制器内的子类以呈现正确的视图之外,它还可以工作.IE浏览器./餐厅工作,并去物业控制器,但我不能告诉他们,他们想要餐厅的子类?
map.resources :restaurant, :controller => :properties
map.resources :properties
Run Code Online (Sandbox Code Playgroud)
解决问题的一个简单方法是创建一个子控制器:
class RestaurantsController < PropertiesController
end
Run Code Online (Sandbox Code Playgroud)
在路线中,您可以将餐厅映射到餐厅控制器.
更新:或者你可以尝试这样的东西routes.rb:
map.resources :restaurants, :controller => :properties, :requirements => {:what => :Restaurant}
map.resources :properties, :requirements => {:what => :Property}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用前置过滤器来检查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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1823 次 |
| 最近记录: |