修改查询URL /路径而不重定向

时间:2016-12-01 12:33:53

标签: ruby-on-rails ruby-on-rails-4 httprequest puma

我试图在Puma收到请求之前尝试修改我的请求网址。

例:

用户使用 / locale / resource /:id 等网址访问该网站。 但我希望他重定向 / 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

因此,用户将被重定向到正确的'网址,但有重定向...

我想知道是否有一种方法可以直接在请求中修改网址,这样我就不必重定向到用户,这样就可以让这种操作变得更加透明'

有可能吗?或者由于HTTP procotol而完全不可能?

1 个答案:

答案 0 :(得分:0)

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

stateObj = history.state     # in the case somebody already uses it
stateObj.url = slugUrl       # will help with turbolinks and like
history.replaceState stateObj, "", url

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