Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 修改查询url/路径而不重定向_Ruby On Rails_Ruby On Rails 4_Httprequest_Puma - Fatal编程技术网

Ruby on rails 修改查询url/路径而不重定向

Ruby on rails 修改查询url/路径而不重定向,ruby-on-rails,ruby-on-rails-4,httprequest,puma,Ruby On Rails,Ruby On Rails 4,Httprequest,Puma,我正试图找到一种方法,在Puma收到我的请求URL之前修改它 例如: 用户使用类似于/locale/resource/:id的url访问站点。 但我希望他被重定向到/locale/'resource/resource slug,因为它更漂亮 我已经做了这个的第一个版本 before_action :redirect_with_pretty_challenge_url, only: %w(index show new edit) private def redirect_with_pretty

我正试图找到一种方法,在Puma收到我的请求URL之前修改它

例如:

用户使用类似于/locale/resource/:id的url访问站点。 但我希望他被重定向到/locale/'resource/resource slug,因为它更漂亮

我已经做了这个的第一个版本

before_action :redirect_with_pretty_challenge_url, only: %w(index show new edit)

private

def redirect_with_pretty_challenge_url
  param_kind = challenge_show_or_admin_challenges? ? :id : :challenge_id
  return unless params_is_id?(param_kind)

  redirect_to stubbed_request_path_parameters(param_kind)
end

def params_is_id?(param_kind)
  return true if params[param_kind].is_a?(Integer)

  params[param_kind].to_i.to_s == params[param_kind]
end

def stubbed_request_path_parameters(param_kind)
  request.path_parameters[param_kind] = Challenge.find_by_params(params[param_kind])&.slug
  request.path_parameters
end
因此,用户被重定向到“正确”的url,但通过重定向

我想知道是否有一种方法可以直接在请求中修改url,这样我就不必将_重定向到用户,这将使这种操作方式更加“透明”


可能吗?或者由于HTTP协议而完全不可能?

slugUrl
传递给javascript并使用
history.replaceState()


例如,您可以将
slugUrl
甚至放在模板中,并将slug building登录放在
ApplicationController
helper方法中。

slugUrl
传递给javascript并使用
history.replaceState()


例如,您可以将
slugUrl
甚至放在模板中,并将slug building login放在
ApplicationController
helper方法中。

您可以更改或apache,但它不会更新浏览器地址栏-Rack/Rails将其视为请求uri。我的意思是,只要学会接受它,你的用户很可能永远不会在乎URL。也许用户不在乎。但我知道。我想控制显示的内容。甚至连网址都没有。我想我会坚持使用一个很好的旧重定向。您可以更改或apache,但它不会更新浏览器地址栏-这正是Rack/Rails所看到的请求uri。我的意思是,只要学会接受它,你的用户很可能永远不会在乎URL。也许用户不在乎。但我知道。我想控制显示的内容。甚至连网址都没有。我想我会坚持一个好的老习惯。
stateObj = history.state     # in the case somebody already uses it
stateObj.url = slugUrl       # will help with turbolinks and like
history.replaceState stateObj, "", url