我试图在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而完全不可能?
答案 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
帮助方法中。