有無性病類:Rails的STI:單路徑,不同的控制器
class Page < ActiveRecord::Base
belongs_to :user
end
class FirstTypePage < Page
end
class SecondTypePage < Page
end
控制器爲每個類,
class PageController < AplicationCorroller
end
class FirstTypePageController < PageController
end
class SecondTypePageController < PageController
end
和工藝路線:
resources :user
resource :page
end
如何通過FirstTypePageController處理FirstTypePage ,SecondTypePage by SecondTypePageController在單個路徑上?
即
用戶/ 1 /頁/ 2通過處理: FirstTypePageController如果 「2頁」 類型是 「FirstTypePage」, 和由SecondTypePageController如果 「2頁」 類型 「SecondTypePage」?
UPDATE:我的解決方案:
match 'user/:user_id/page/:action',
:controller=>'page/first_type_page',
:constraints=>PageConstraints.new('FirstTypePage')
match 'user/:user_id/page/:action',
:controller=>'page/second_type_page',
:constraints=>PageConstraints.new('SecondTypePage')
class PageConstraints
@@cache ||= {}
def initialize o_type
#@mutex = Mutex.new
@o_type = o_type
end
def matches?(request)
user_id = request.params[:user_id]
#add Mutex lock here
unless page_type = @@cache[user_id]
page_type = User.find(user_id).do_some_magik_to_suggest_type
@@cache[page_id] = page_type
@@cache.shift if @@cache.size > 1000
end
page_type == @o_type
end
end
我覺得這個解決方案將工作速度快在頁面類型少量的,我們可以管理存儲容量,用於航線上大量的
頁
換句話說,可以控制在路由級別運行選擇。 lIke:controller => User.controller_for_page(:user_id)?? – potapuff