Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何轻松插入;m";rails网站中的paramater(移动设备)?_Ruby On Rails_Ruby_Mobile_Layout - Fatal编程技术网

Ruby on rails 如何轻松插入;m";rails网站中的paramater(移动设备)?

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

我想在我现在拥有的所有URL中插入一个URL参数“m”,它代表“mobile”。我现在不考虑其他选择,比如附加设计。 那么,我如何才能在不中断当前功能的情况下轻松安全地插入“m”?我应该在routes.rb中添加一个部分吗?如果是,它应该是什么样子


“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]