유무 STI 클래스 : 각 클래스레일 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
및 경로 : FirstTypePageController에 의해 FirstTypePage을 처리하는 방법
resources :user
resource :page
end
SecondTypePageController by SecondPathPage 단일 경로에서?
즉
사용자/1 페이지/2에 의해 처리되고/"2 페이지의"타입 "FirstTypePage" 이다 FirstTypePageController 경우 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
나는이 솔루션은 페이지 유형의 작은 크기에 빠른 작동합니다 생각하고, 우리가 페이지
을 다량에 라우팅에 사용되는 메모리의 크기를 관리 할 수 있습니다
했다. 뭔가가 : 컨트롤러 => User.controller_for_page (: user_id) ?? – potapuff