我们的网站应该允许显示与给定网址相关的不同内容..类似于wordpress中的多字节,我们有一个安装,并根据网址提供内容。
因为有必要使用正确语言的路线我想使用“动态路线”方法来提供正确的内容。我现在的问题是,如果它们是动态的,我找不到如何在routes.rb中提供正确路由的方法。
如何将请求对象“访问”或“传递”到routes.rb文件中的任何方法
f.e。像这样
Frontend::Application.routes.draw do
DynamicRouter.load request
end
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
这不起作用,因为在routes.rb中未定义请求
答案 0 :(得分:3)
回答你的问题:我如何“访问”或“传递”请求对象到routes.rb文件中的任何方法。从机架中间件获取它作为ENV对象。参见下面的代码
# 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
在路线中再次抓住
# routes.rb
Frontend::Application.routes.draw do
request=ENV["OBJ_REQUEST"]
DynamicRouter.load request
end
答案 1 :(得分:1)
可能的解决方案是在routes.rb上创建默认规则,并添加可根据域转换路径的机架中间件
# routes.rb
get '/category/:id', :to => 'categories#show'
在中间件中,如果域匹配“.es”,您可以将类似'categoria /:id'的路径转换为'/ category /:id',然后应用程序才会到达路由器层。
有关机架中间件的更多信息:http://guides.rubyonrails.org/rails_on_rack.html