博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在Ruby on Rails中获得当前的绝对URL?
阅读量:3576 次
发布时间:2019-05-20

本文共 3978 字,大约阅读时间需要 13 分钟。

如何在Ruby on Rails视图中获取当前的绝对

request.request_uri仅返回相对URL。


#1楼

url_for(params)

您可以轻松添加一些新参数:

url_for(params.merge(:tag => "lol"))

#2楼

这适用于Ruby on Rails 3.0,并且大多数版本的Ruby on Rails都应支持:

request.env['REQUEST_URI']

#3楼

(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)

#4楼

除了有人说他使用调试器找到他所寻找的内容之外,该线程中的所有建议都没有对我产生可悲的帮助。

我创建了一些自定义错误页面,而不是标准的404和500,但是request.url/404结尾,而不是预期的/non-existing-mumbo-jumbo

我需要使用的是

request.original_url

#5楼

使用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

#6楼

要获取绝对网址,这意味着可以from the root显示,如下所示

<%= link_to 'Edit', edit_user_url(user) %>

users_url帮助程序将生成一个包含协议和主机名的URL。 users_path帮助器仅生成路径部分。

users_url: http://localhost/usersusers_path: /users

#7楼

如果您想表达具体的意思,就知道需要的路径:

link_to current_path(@resource, :only_path => false), current_path(@resource)

#8楼

在Rails 3中,您可以使用

request.original_url


#9楼

如果您使用的是Rails 3.2Rails 4 ,则应使用request.original_url获取当前URL。


该方法的文档位于但如果您感到好奇,则可以执行以下操作:

def original_url  base_url + original_fullpathend

#10楼

您可以使用ruby方法:

:root_url

这将获得带有基本URL的完整路径:

localhost:3000/bla

#11楼

对于导轨3:

request.fullpath


#12楼

如果相对而言,您的意思是没有域,那么请查看request.domain


#13楼

对于Rails 3.2或Rails 4+

您应该使用request.original_url来获取当前URL。

该方法记录在 ,但是如果您很好奇,则实现为:

def original_url  base_url + original_fullpathend

对于Rails 3:

您可以编写"#{request.protocol}#{request.host_with_port}#{request.fullpath}" ,因为request.url现在已弃用。


对于Rails 2:

您可以编写request.url而不是request.request_uri 。 这将协议(通常为http://)与主机以及request_uri结合在一起,以提供完整的地址。


#14楼

我认为request.domain可以工作,但是如果您位于blah.blah.com之类的子目录中怎么办? 这样的事情可能会起作用:

<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>

根据您的路径结构更改参数。

希望有帮助!


#15楼

request.env["REQUEST_URI"]

可以在Rails 2.3.4上进行测试,并且不了解其他版本。


#16楼

您可以将任何一个用于rails 3.2:

request.original_urlorrequest.env["HTTP_REFERER"]orrequest.env['REQUEST_URI']

我认为它可以在任何地方使用

"#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}"

#17楼

Rails 4.0

您可以使用request.original_url ,输出将如以下示例所示

get "/articles?page=2"request.original_url # => "http://www.example.com/articles?page=2"

#18楼

获取没有任何查询参数的请求URL。

def current_url_without_parameters  request.base_url + request.pathend

#19楼

您可以使用:

request.full_path

要么

request.url

希望它能解决您的问题。

干杯


#20楼

您可以使用

request.original_url

要么

"#{request.protocol}#{request.host_with_port}"

获取当前URL。


#21楼

您可以将变量设置为URI.parse(current_url) ,我在这里还没有看到这个建议,它对我URI.parse(current_url)


#22楼

您可以在ApplicationController中添加此方法以返回当前URL并允许合并其他参数

# https://x.com/y/1?page=1 # + current_url( :page => 3 )# = https://x.com/y/1?page=3def current_url(overwrite={})    url_for :only_path => false, :params => params.merge(overwrite)end

用法示例:

current_url --> http://...current_url(:page=>4) --> http://...&page=4

#23楼

对于Rails 3.2或Rails 4,只需采用这种方式即可获得“ request.original_url”参考:

对于Rails 3,因为request.url已被弃用。我们可以通过级联获得绝对路径

"#{request.protocol}#{request.host_with_port}#{request.fullpath}"

对于Rails 2

request.url

#24楼

弃用警告:不建议 。 请改用fullpath。


#25楼

我认为Ruby on Rails 3.0方法现在是request.fullpath


#26楼

看起来request_uri在Ruby on Rails 3中已弃用。

Using #request_uri is deprecated. Use fullpath instead.

#27楼

在Ruby on Rails 3.1.0.rc4中:

request.fullpath

#28楼

对于Ruby on Rails 3:

request.urlrequest.host_with_port

我启动了一个调试器会话并查询了请求对象:

request.public_methods

#29楼

您可以使用url_for(only_path: false)


#30楼

我需要应用程序但需要有子目录。 我用了:

root_url(:only_path => false)

转载地址:http://rxogj.baihongyu.com/

你可能感兴趣的文章
python学习8(列表)
查看>>
JavaScript学习(new1)
查看>>
http GET 和 POST 请求的优缺点、区别以及误区
查看>>
JVM的4种垃圾回收算法、垃圾回收机制
查看>>
什么是分布式事务
查看>>
常用的分布式事务解决方案
查看>>
设计模式:单例模式 (关于饿汉式和懒汉式)
查看>>
一致性Hash算法
查看>>
更新Navicat Premium 后打开数据库出现1146 - Table 'performance_schema.session_variables' doesn't exist
查看>>
安装rabbitmq时踩的坑
查看>>
2021-06-09数据库添加多条数据
查看>>
简单的JAVA小作品
查看>>
CMake下载
查看>>
未调用fflush产生的图片文件无法打开问题
查看>>
SQL 约束(二)
查看>>
SQL ALTER用法(三)
查看>>
SQL where子句及查询条件语句(六)
查看>>
SQL 连接JOIN(九)
查看>>
linux VM虚拟机可以ping通主机,但主机无法ping通虚拟机
查看>>
C++ 中Struct与typedef struct总结
查看>>