如何在Ruby on Rails视图中获取当前的 absolute URL ?
request.request_uri 仅返回相对URL .
request.request_uri
我认为request.domain会起作用,但是如果你在像blah.blah.com这样的子目录中呢?像这样的东西可以工作:
<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>
根据路径结构更改参数 .
希望有所帮助!
如果是亲戚,你的意思是没有域名,那么请查看 request.domain .
request.domain
对于导轨3:
request.fullpath
看起来在Ruby on Rails 3中不推荐使用 request_uri .
request_uri
Using #request_uri is deprecated. Use fullpath instead.
(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)
你可以使用任何一个rails 3.2:
request.original_url or request.env["HTTP_REFERER"] or request.env['REQUEST_URI']
我认为它将适用于所有地方
"#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}"
你可以使用ruby方法:
:root_url
这将获得基本网址的完整路径:
localhost:3000/bla
线程中的所有建议都没有让我伤心,除了有人说他使用调试器找到他所寻找的东西 .
我创建了一些自定义错误页面而不是标准的404和500,但是 request.url 在 /404 中结束而不是预期的 /non-existing-mumbo-jumbo .
request.url
/404
/non-existing-mumbo-jumbo
我需要使用的是
request.original_url
这适用于Ruby on Rails 3.0,并且应该受到大多数Ruby on Rails版本的支持:
request.env['REQUEST_URI']
url_for(params)
您可以轻松添加一些新参数:
url_for(params.merge(:tag => "lol"))
你可以用 url_for(:only_path => false)
url_for(:only_path => false)
request.env["REQUEST_URI"]
在rails 2.3.4中测试过,并且不了解其他版本 .
对于Ruby on Rails 3:
request.url request.host_with_port
我启动了调试器会话并查询了请求对象:
request.public_methods
要获得绝对URL,这意味着它可以像这样显示 from the root
from the root
<%= link_to 'Edit', edit_user_url(user) %>
users_url助手生成包含协议和主机名的URL . users_path帮助程序仅生成路径部分 .
users_url: http://localhost/users users_path: /users
我认为Ruby on Rails 3.0方法现在是 request.fullpath .
获取没有任何查询参数的请求URL .
def current_url_without_parameters request.base_url + request.path end
我需要应用程序URL但是需要子目录 . 我用了:
root_url(:only_path => false)
Rails 4.0
你可以使用 request.original_url ,输出将如下面给出的例子
get "/articles?page=2" request.original_url # => "http://www.example.com/articles?page=2"
如果你想具体,意思是,你知道你需要的道路:
link_to current_path(@resource, :only_path => false), current_path(@resource)
您应该使用 request.original_url 获取当前URL .
这个方法记录在original_url method,但是如果你很好奇,那么实现是:
def original_url base_url + original_fullpath end
您可以编写 "#{request.protocol}#{request.host_with_port}#{request.fullpath}" ,因为 request.url 现已弃用 .
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
你可以写 request.url 而不是 request.request_uri . 这将协议(通常是http://)与主机相结合,而request_uri则为您提供完整的地址 .
你可以使用
要么
"#{request.protocol}#{request.host_with_port}"
获取当前的URL .
使用Ruby 1.9.3-p194和Ruby on Rails 3.2.6:
如果 request.fullpath 不适合您,请尝试 request.env["HTTP_REFERER"]
这是我下面的故事 .
检测到当前URL(在浏览器中显示在用户地址栏中)的累积页面结合了不同控制器的信息,例如 http://localhost:3002/users/1/history/issues ,我遇到了类似的问题 .
http://localhost:3002/users/1/history/issues
用户可以切换到不同类型的问题列表 . 所有这些列表都是通过Ajax从不同的控制器/部分加载的(无需重新加载) .
问题是为列表的每个项目中的后退按钮设置正确的路径,以便后退按钮可以在其自己的页面和累积页面历史记录中正常工作 .
如果我使用 request.fullpath ,它会返回上一个JavaScript请求的路径,这绝对不是我正在寻找的URL .
所以我使用了 request.env["HTTP_REFERER"] 来存储上次重新加载的请求的URL .
这是部分做出决定的摘录
- if request.env["HTTP_REFERER"].to_s.scan("history").length > 0 - back_url = user_history_issue_path(@user, list: "needed_type") - else - back_url = user_needed_type_issue_path(@user) - remote ||= false =link_to t("static.back"), back_url, :remote => remote
在Rails 3中,您可以使用
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
您可以使用:
request.full_path
希望它能解决你的问题 .
干杯
您可以在ApplicationController中添加此current_url方法以返回当前URL并允许合并其他参数
# https://x.com/y/1?page=1 # + current_url( :page => 3 ) # = https://x.com/y/1?page=3 def current_url(overwrite={}) url_for :only_path => false, :params => params.merge(overwrite) end
Example Usage:
current_url --> http://... current_url(:page=>4) --> http://...&page=4
如果您正在使用 Rails 3.2 或 Rails 4 ,则应使用 request.original_url 获取当前网址 .
该方法的文档位于http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url,但如果您感到好奇,那么实现是:
你可以将变量设置为 URI.parse(current_url) ,我在这里看不到这个提议,它对我有用 .
URI.parse(current_url)
弃权警告:Using #request_uri is deprecated . 请改用完整路径 .
在Ruby on Rails 3.1.0.rc4中:
For Rails 3.2 or Rails 4 只需这样"request.original_url"参考:Original URL Method
For Rails 3 由于request.url已弃用 . 我们可以通过连接获得绝对路径
For Rails 2
30 回答
我认为request.domain会起作用,但是如果你在像blah.blah.com这样的子目录中呢?像这样的东西可以工作:
根据路径结构更改参数 .
希望有所帮助!
如果是亲戚,你的意思是没有域名,那么请查看
request.domain
.对于导轨3:
看起来在Ruby on Rails 3中不推荐使用
request_uri
.你可以使用任何一个rails 3.2:
我认为它将适用于所有地方
你可以使用ruby方法:
这将获得基本网址的完整路径:
线程中的所有建议都没有让我伤心,除了有人说他使用调试器找到他所寻找的东西 .
我创建了一些自定义错误页面而不是标准的404和500,但是
request.url
在/404
中结束而不是预期的/non-existing-mumbo-jumbo
.我需要使用的是
这适用于Ruby on Rails 3.0,并且应该受到大多数Ruby on Rails版本的支持:
您可以轻松添加一些新参数:
你可以用
url_for(:only_path => false)
在rails 2.3.4中测试过,并且不了解其他版本 .
对于Ruby on Rails 3:
我启动了调试器会话并查询了请求对象:
要获得绝对URL,这意味着它可以像这样显示
from the root
users_url助手生成包含协议和主机名的URL . users_path帮助程序仅生成路径部分 .
我认为Ruby on Rails 3.0方法现在是
request.fullpath
.获取没有任何查询参数的请求URL .
我需要应用程序URL但是需要子目录 . 我用了:
Rails 4.0
你可以使用
request.original_url
,输出将如下面给出的例子如果你想具体,意思是,你知道你需要的道路:
对于Rails 3.2或Rails 4
您应该使用
request.original_url
获取当前URL .这个方法记录在original_url method,但是如果你很好奇,那么实现是:
For Rails 3:
您可以编写
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
,因为request.url
现已弃用 .For Rails 2:
你可以写
request.url
而不是request.request_uri
. 这将协议(通常是http://)与主机相结合,而request_uri则为您提供完整的地址 .你可以使用
要么
获取当前的URL .
使用Ruby 1.9.3-p194和Ruby on Rails 3.2.6:
如果 request.fullpath 不适合您,请尝试 request.env["HTTP_REFERER"]
这是我下面的故事 .
检测到当前URL(在浏览器中显示在用户地址栏中)的累积页面结合了不同控制器的信息,例如
http://localhost:3002/users/1/history/issues
,我遇到了类似的问题 .用户可以切换到不同类型的问题列表 . 所有这些列表都是通过Ajax从不同的控制器/部分加载的(无需重新加载) .
问题是为列表的每个项目中的后退按钮设置正确的路径,以便后退按钮可以在其自己的页面和累积页面历史记录中正常工作 .
如果我使用 request.fullpath ,它会返回上一个JavaScript请求的路径,这绝对不是我正在寻找的URL .
所以我使用了 request.env["HTTP_REFERER"] 来存储上次重新加载的请求的URL .
这是部分做出决定的摘录
在Rails 3中,您可以使用
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
您可以使用:
要么
希望它能解决你的问题 .
干杯
您可以在ApplicationController中添加此current_url方法以返回当前URL并允许合并其他参数
Example Usage:
如果您正在使用 Rails 3.2 或 Rails 4 ,则应使用
request.original_url
获取当前网址 .该方法的文档位于http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url,但如果您感到好奇,那么实现是:
你可以将变量设置为
URI.parse(current_url)
,我在这里看不到这个提议,它对我有用 .弃权警告:Using #request_uri is deprecated . 请改用完整路径 .
在Ruby on Rails 3.1.0.rc4中:
For Rails 3.2 or Rails 4 只需这样"request.original_url"参考:Original URL Method
For Rails 3 由于request.url已弃用 . 我们可以通过连接获得绝对路径
For Rails 2