2014-02-18 2 views
2

우리의 웹 사이트는 주어진 URL과 관련된 다른 내용을 표시 할 수 있어야합니다. 우리는 하나의 설치가 있고 URL에 따라 콘텐츠를 제공하는 다중 사이트와 같은 것입니다.routails.rb에서 레일스 액세스 요청 동적 경로

올바른 언어로 경로가 있어야하므로 올바른 콘텐츠를 제공하기 위해 "동적 경로"접근 방식을 사용하고 싶습니다. 내 문제는 이제 동적 인 경우 routes.rb에서 적절한 경로를 제공하는 방법을 찾지 못한다는 것입니다.

어떻게 I "접속"또는 "패스"를 routes.rb 파일

f.e. 내부에 방법에 요청 객체 요청이 routes.rb

+0

그래서, 기본적으로, 당신은 모든 경로를 지원하려는에서 다시

# lib/dynamicrouterrequest.rb require 'rack' class DynamicRouterRequest def initialize(app) @app = app end def call(env) request=Rack::Request.new(env) ENV["OBJ_REQUEST"]=request.inspect.to_s @app.call(env) end end 

잡아 그것을 아래 코드? –

+0

나는 각 웹 사이트를위한 동적 경로를 원합니다. 우리 사이트 중 하나에 대해/category/: id를 호출하고 싶으면 또 하나는/category/: 슬러그해야합니다. routes.rb에서 request 객체를 모델 방법, 나는 이미 나머지를 할 수있는 방법을 알고있다 – Mik

+0

/category/: id와/category/: slug는 같은 경로이다. 유일한 차이점은 동적 부분은 params [: id]에 저장되고 두 번째 부분은 params [: slug] –

답변

1

에서 정의되지 않기 때문에이

routes.rb처럼

Frontend::Application.routes.draw do 
    DynamicRouter.load request 
    end 

응용 프로그램/모델/dynamic_router.rb는

class DynamicRouter 
    def self.load request 
    current_site = Site.find_by_host(request.host) 
    Frontend::Application.routes.draw do 
     current_site.routes do |route| 
     get "#{route.match}", to: "#{route.to}" 
     end 
    end 
    end 
end 

이 나던 작품은 가능한 soluction은이다 routes.rb에 기본 규칙을 만들고 도메인에 따라 경로를 변형 할 수있는 랙 미들웨어를 추가하십시오.

# routes.rb 
get '/category/:id', :to => 'categories#show' 

미들웨어에서는 응용 프로그램이 라우터 계층에 도달하기 전에 도메인이 '.es'와 일치하면 'categoria/: id'에서 '/ category/: id'로 경로를 변환 할 수 있습니다. 랙 미들웨어에

더 : http://guides.rubyonrails.org/rails_on_rack.html

2

은 귀하의 질문에 대답하려면 : 나는 "접근"또는 랙 미들웨어에서 ENV 객체로 routes.rb 파일 내부의 방법으로 그것을 요청 객체를 가져옵니다 "통과"할 수 있습니까. 참조 경로

# routes.rb 
Frontend::Application.routes.draw do 
    request=ENV["OBJ_REQUEST"] 
    DynamicRouter.load request 
end