Ruby on rails 如何轻松插入;m";rails网站中的paramater(移动设备)?
我想在我现在拥有的所有URL中插入一个URL参数“m”,它代表“mobile”。我现在不考虑其他选择,比如附加设计。 那么,我如何才能在不中断当前功能的情况下轻松安全地插入“m”?我应该在routes.rb中添加一个部分吗?如果是,它应该是什么样子Ruby on rails 如何轻松插入;m";rails网站中的paramater(移动设备)?,ruby-on-rails,ruby,mobile,layout,Ruby On Rails,Ruby,Mobile,Layout,我想在我现在拥有的所有URL中插入一个URL参数“m”,它代表“mobile”。我现在不考虑其他选择,比如附加设计。 那么,我如何才能在不中断当前功能的情况下轻松安全地插入“m”?我应该在routes.rb中添加一个部分吗?如果是,它应该是什么样子 “m”是可选的,如果它被选中,那么网站应该以正常模式显示。我可能会写一些简单的代码 也许是这样的 class ParamSanity def initialize(app) @app = app end def call(env
“m”是可选的,如果它被选中,那么网站应该以正常模式显示。我可能会写一些简单的代码 也许是这样的
class ParamSanity
def initialize(app)
@app = app
end
def call(env)
request = Rack::Request.new(env)
request.params["m"] = stands_for_mobile
status, headers, body = @app.call(env)
[status, headers, body]
end
end
scope "(:mobile)" do
...your resources
end
然后在config/application.rb中
config.middleware.use ParamSanity
我可能会写一些简单的 也许是这样的
class ParamSanity
def initialize(app)
@app = app
end
def call(env)
request = Rack::Request.new(env)
request.params["m"] = stands_for_mobile
status, headers, body = @app.call(env)
[status, headers, body]
end
end
scope "(:mobile)" do
...your resources
end
然后在config/application.rb中
config.middleware.use ParamSanity
你可以这样做
class ParamSanity
def initialize(app)
@app = app
end
def call(env)
request = Rack::Request.new(env)
request.params["m"] = stands_for_mobile
status, headers, body = @app.call(env)
[status, headers, body]
end
end
scope "(:mobile)" do
...your resources
end
看看这个问题
你可以这样做
class ParamSanity
def initialize(app)
@app = app
end
def call(env)
request = Rack::Request.new(env)
request.params["m"] = stands_for_mobile
status, headers, body = @app.call(env)
[status, headers, body]
end
end
scope "(:mobile)" do
...your resources
end
看看这个问题
这是一个难题。难道没有更好的、干净的解决方案吗?有许多其他方法可以实现这一点,例如在ApplicationController中使用
操作之前的。就我个人而言,我并不认为使用机架中间件全局添加参数是一种黑客行为。Rails本身就是这样做的。1)不能改为在routes.rb中添加路由或名称空间吗?2) 如何通过before_action实现这一点,您能告诉我吗?我不知道如何通过使用路由向所有请求和响应添加参数。一定要在动作前使用,在应用程序控制器中定义一个方法,手动添加参数(就像我在上面所做的那样),然后像这样使用before过滤器:动作前:我的酷法
,这是一种攻击。难道没有更好的、干净的解决方案吗?有许多其他方法可以实现这一点,例如在ApplicationController中使用操作之前的。就我个人而言,我并不认为使用机架中间件全局添加参数是一种黑客行为。Rails本身就是这样做的。1)不能改为在routes.rb中添加路由或名称空间吗?2) 如何通过before_action实现这一点,您能告诉我吗?我不知道如何通过使用路由向所有请求和响应添加参数。一定要在动作前使用,在ApplicationController
中定义一个方法,手动添加参数(就像我在上面所做的那样),然后像这样使用before过滤器:动作前:我的cool\u方法
,这样它就不会破坏任何东西?不,它不会。您的所有路线都可以通过两种方式访问:/posts/12
/m/posts/12
仅在后一种情况下,您将有额外的参数params[:mobile]
。因此它不会破坏任何东西?不,不会。您的所有路线都可以通过两种方式访问:/posts/12
/m/posts/12
仅在后一种情况下,您将使用附加参数params[:mobile]
。