Jak*_*old 1030 ruby url ruby-on-rails
如何在Ruby on Rails视图中获取当前的绝对URL?
该request.request_uri只返回相对URL.
Jai*_*yer 1419
您应该使用request.original_url获取当前URL.
这个方法记录在original_url方法中,但是如果你很好奇,那么实现是:
def original_url
base_url + original_fullpath
end
Run Code Online (Sandbox Code Playgroud)
你可以写"#{request.protocol}#{request.host_with_port}#{request.fullpath}",因为request.url现在已经弃用了.
你可以写request.url而不是request.request_uri.这将协议(通常是http://)与主机相结合,而request_uri则为您提供完整的地址.
eco*_*gic 68
弃用警告:不推荐使用#request_uri.请改用完整路径.
Mik*_*ike 60
如果您使用的是Rails 3.2或Rails 4,则应使用request.original_url获取当前URL.
该方法的文档位于http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url,但如果您对此感到好奇,那么实现是:
def original_url
base_url + original_fullpath
end
Run Code Online (Sandbox Code Playgroud)
gro*_*ser 52
您可以在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
Run Code Online (Sandbox Code Playgroud)
用法示例:
current_url --> http://...
current_url(:page=>4) --> http://...&page=4
Run Code Online (Sandbox Code Playgroud)
Duk*_*uke 36
对于Ruby on Rails 3:
request.url
request.host_with_port
Run Code Online (Sandbox Code Playgroud)
我启动了一个调试器会话并查询了请求对象:
request.public_methods
Run Code Online (Sandbox Code Playgroud)
Luc*_*nan 32
在Ruby on Rails 3.1.0.rc4中:
request.fullpath
Run Code Online (Sandbox Code Playgroud)
Dor*_*ian 28
我需要应用程序URL但是需要子目录.我用了:
root_url(:only_path => false)
Run Code Online (Sandbox Code Playgroud)
Yur*_*hov 27
url_for(params)
Run Code Online (Sandbox Code Playgroud)
您可以轻松添加一些新参数:
url_for(params.merge(:tag => "lol"))
Run Code Online (Sandbox Code Playgroud)
Jam*_*s M 16
我认为request.domain可以工作,但是如果你在像blah.blah.com这样的子目录中呢?像这样的东西可以工作:
<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>
Run Code Online (Sandbox Code Playgroud)
根据路径结构更改参数.
希望有所帮助!
Ken*_*ley 14
它似乎request_uri在Ruby on Rails 3中被弃用了.
Using #request_uri is deprecated. Use fullpath instead.
Run Code Online (Sandbox Code Playgroud)
Ser*_*kyy 13
使用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.
这是部分做出决定的摘录
- 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
Run Code Online (Sandbox Code Playgroud)
Tim*_*ord 12
这适用于Ruby on Rails 3.0,并且应该受到大多数Ruby on Rails版本的支持:
request.env['REQUEST_URI']
Run Code Online (Sandbox Code Playgroud)
Fra*_*ans 11
线程中的所有建议都没有让我伤心,除了有人说他使用调试器找到他所寻找的东西.
我创建了一些自定义错误页面,而不是标准的404和500,但request.url结束/404而不是预期/non-existing-mumbo-jumbo.
我需要使用的是
request.original_url
Run Code Online (Sandbox Code Playgroud)
小智 8
(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)
Run Code Online (Sandbox Code Playgroud)
你可以使用ruby方法:
:root_url
Run Code Online (Sandbox Code Playgroud)
这将获得基本网址的完整路径:
localhost:3000/bla
Run Code Online (Sandbox Code Playgroud)
在Rails 3中,您可以使用
request.original_url
Run Code Online (Sandbox Code Playgroud)
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
您可以将任何一种用于 rails 3.2:
request.original_url
or
request.env["HTTP_REFERER"]
or
request.env['REQUEST_URI']
Run Code Online (Sandbox Code Playgroud)
我认为它会在任何地方工作
"#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}"
Run Code Online (Sandbox Code Playgroud)
Rails 4.0
你可以使用request.original_url,输出将如下面给出的例子
get "/articles?page=2"
request.original_url # => "http://www.example.com/articles?page=2"
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用
request.original_url
Run Code Online (Sandbox Code Playgroud)
或者
"#{request.protocol}#{request.host_with_port}"
Run Code Online (Sandbox Code Playgroud)
获取当前 URL。
小智 5
对于Rails 3.2或Rails 4 只需通过这种方式获取“request.original_url”参考:原始URL方法
对于 Rails 3 由于 request.url 已被弃用。我们可以通过连接来获取绝对路径
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
Run Code Online (Sandbox Code Playgroud)
对于轨道 2
request.url
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
468203 次 |
| 最近记录: |