首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Rails5中,使用带有方法delete的帮助器link_to会发出get和object#show,而不是object#destroy

这是因为在Rails中,link_to方法默认使用HTTP的GET请求来生成链接。而在HTML中,只支持GET和POST请求,不支持DELETE请求。因此,为了实现DELETE请求,Rails使用了一种称为"伪造DELETE请求"的技术。

在Rails中,当我们使用带有方法delete的link_to帮助器时,它会生成一个带有特殊属性的链接,如data-method="delete"和rel="nofollow"。这些属性告诉Rails在点击链接时发送一个DELETE请求。

然而,由于HTML本身不支持DELETE请求,所以Rails通过JavaScript来模拟发送DELETE请求。具体来说,它会在点击链接时触发一个JavaScript函数,该函数会创建一个隐藏的表单,将请求方法设置为DELETE,并将表单提交到指定的URL。这样,服务器就能够正确地处理DELETE请求,并执行相应的操作,如删除对象。

需要注意的是,为了使这种伪造DELETE请求的技术生效,我们需要在应用程序的布局文件中包含Rails提供的javascript_include_tag和csrf_meta_tags帮助器。这些帮助器会加载必要的JavaScript文件和CSRF令牌,以确保请求的安全性。

总结起来,使用带有方法delete的link_to帮助器在Rails5中会发出GET请求和object#show方法,但实际上会通过JavaScript模拟发送DELETE请求来执行object#destroy操作。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):提供可扩展的计算能力,满足各种业务需求。详情请参考:https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CDB):高性能、可扩展的关系型数据库服务。详情请参考:https://cloud.tencent.com/product/cdb
  • 云原生容器服务(TKE):基于Kubernetes的容器管理服务,简化容器化应用的部署和管理。详情请参考:https://cloud.tencent.com/product/tke
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Rails路由

    用于生成路径和URL地址的辅助方法 在创建资源路由时,会同时创建多个可以在控制器中使用的辅助方法,如上面的资源路由会创建以下方法: photos_path:返回值为 /photos new_photos_path...有时候在复数资源中希望能够不使用ID就能查找资源,如显示当前登录用户的信息: get 'profile', to: 'users#show' 如果 get 方法的to选项的值是字符串,那么这个字符串应该使用...把控制器放入同一命名空间是非常常见的,如将管理员有关的控制器置于 Admin:: 命名空间中,这样可以把控制器文件放在 app/controllers/admin 文件夹中,在路由中这样声明: namespace...方法时,可以传入Magazine和Ad的实例,而不只是数字ID: link_to 'Ad details', magazine_ad_path(@magazine, @ad) %> 还可以使用...当然在使用 link_to 等辅助方法时,可以只指定对象,而不必完整调用 url_for 方法: link_to 'Ad details', [@magazine, @ad] %> link_to

    4.5K20

    REST API和SOAP API之间的区别

    服务器地址和请求状态的组合,将计算散列键组合成结果集。 GET请求允许客户端发出非常特定的请求,但只在必要时。...在RESTful系统中,动词的数量有限,使人们对这种方法感到困惑和沮丧。看似任意的和不必要的约束,实际上是为了以非特定于应用程序的方式鼓励可预测的行为。...这是基于网络的分布式基础设施中的一个关键属性。如果客户端在发出GET请求时被中断,那么由于动词的幂等性,它应该被授权再次发出请求。 在设计良好的基础设施中,客户机向哪个应用程序请求什么并不重要。...它们返回的不是201,而是创建了资源主体的200。这似乎是避免第二个请求的快捷方式,但它结合了POST和GET函数,同时增加了缓存资源的可能性。避免以牺牲大局为代价而走捷径的冲动。...注意:此协议级别的处理并不一定排除需要更高(应用程序级别)的事务处理,在体系结构上,它是希望在应用程序级别以下进行处理的属性。 DELETE DELETE在公共Web上没有广泛使用(谢天谢地!)

    1.3K20

    REST API和SOAP API之间的区别

    服务器地址和请求状态的组合,将计算散列键组合成结果集。 GET请求允许客户端发出非常特定的请求,但只在必要时。...在RESTful系统中,动词的数量有限,使人们对这种方法感到困惑和沮丧。看似任意的和不必要的约束,实际上是为了以非特定于应用程序的方式鼓励可预测的行为。...这是基于网络的分布式基础设施中的一个关键属性。如果客户端在发出GET请求时被中断,那么由于动词的幂等性,它应该被授权再次发出请求。 在设计良好的基础设施中,客户机向哪个应用程序请求什么并不重要。...它们返回的不是201,而是创建了资源主体的200。这似乎是避免第二个请求的快捷方式,但它结合了POST和GET函数,同时增加了缓存资源的可能性。避免以牺牲大局为代价而走捷径的冲动。...注意:此协议级别的处理并不一定排除需要更高(应用程序级别)的事务处理,在体系结构上,它是希望在应用程序级别以下进行处理的属性。 DELETE DELETE在公共Web上没有广泛使用(谢天谢地!)

    2K10

    SQL命令 CREATE TRIGGER(二)

    在执行SQL触发器代码时,系统会自动重置(NEWs)触发器代码中使用的所有变量。 在执行每条SQL语句之后 IRIS会检查SQLCODE。...因为触发器的代码不是作为过程生成的,所以触发器中的所有局部变量都是公共变量。 这意味着触发器中的所有变量都应该用NEW语句显式声明; 这可以防止它们在调用触发器的代码中与变量发生冲突。...使用SQLCOMPUTED/SQLCOMPUTONCHANGE,而不是覆盖属性的Get()或Set()方法。...使用Get()/Set()方法覆盖可能会导致以下错误结果:{property*O}值是用SQL确定的,没有使用覆盖的Get()/Set()方法。...编译到类例程中的任何其他代码都不能定义相同的标签,包括在其他触发器、非过程块方法、SqlComputeCode和其他代码中。 注意:对标签使用冒号前缀要优先于对主机变量引用使用冒号前缀。

    1.6K20

    No ‘Access-Control-Allow-Origin‘ header is present之 为什么会跨域及解决方案

    1 浏览器的限制 2 跨域 3 浏览器发送的是 XHR (XMLHttpRequest)请求 当以上三个条件都满足时浏览器会抛出跨域请求异常(记住是浏览器抛出的异常,和服务端没太大关系),在讲跨域请求解决方案前先了解几个问题...1 http请求中,哪些是常见的简单请求,哪些是非简单请求 常见的简单请求:请求方法为:GET ,HEAD,POST,请求header里面无自定义头,Content-Type为以下几种:text/plain...请求,带自定义头的ajax请求 2 浏览器在发送跨域请求时候,会有哪些过程 如果是简单请求,浏览器会先发送请求,然后判断服务器返的返回头中是否支持跨域请求,否则抛出跨域异常 如果是非简单请求,浏览器会先发出...不一定生效 方案2: 采用jsonp方式,需要后台和前台同时改动代码, 1 前台需要设置callback参数,如果使用的是jquery ajax 那么dateType属性设置为jsonp,jquery框架会自动设置参数名为...,例如jquery默认使用的是callback 弊端:jsonp 需要前后端都去修改代码,且jsonp是通过动态创建script脚本发送请求,仅支持 GET方法,jsonp发出的请求不是xhr请求,也是能解决跨域的原因

    1.1K10

    Web 应用开发进化论

    HTTP 请求带有四种基本的 HTTP 方法,我想在这里处理它们:GET、POST、PUT、DELETE。...创建 -> HTTP POST 读取 -> HTTP GET 更新 -> HTTP PUT 删除 -> HTTP DELETE 在我们上面的网站示例中,通过访问浏览器中的 URL 从 Web 服务器向客户端提供服务...在传统意义上的网站中,服务器就是负责对客户端的请求做出反应的;要么回复来自 HTTP GET 请求的资源(例如 HTML、CSS、JavaScript),要么确认来自 HTTP POST、PUT、DELETE...在传统网站中,对于每个不同的 URL,都会从客户端向 Web 服务器发出一个新请求。 对于每个 URL,都会将不同的 HTTP GET 方法发送到专用 Web 服务器来完成请求。...,但现在是在客户端而不是服务器上执行的,因此这不再是服务端渲染。

    4.2K10

    5个REST API安全准则

    REST是通过URL路径元素表达系统中特定实体的手段。REST不是一个架构,而是一种在Web上构建服务的架构风格。...1 - 授权 (1)保护HTTP方法 RESTful API通常使用GET(读),POST(创建),PUT(替换/更新)和DELETE(删除记录)。 对于每个资源并非都要提供所有这些操作。...2 - 输入验证 帮助用户将高质量的数据输入到您的Web服务中,例如确保邮政编码对提供的地址有意义,或日期有意义。 如果不是,拒绝该输入。...当在浏览器DOM中插入值时,强烈建议使用.value / .innerText / .textContent而不是使用.innerHTML来更新,因为这样可以防范简单的DOM XSS攻击。...一些方法(例如,HEAD,GET,OPTIONS和TRACE)被定义为安全的,这意味着它们仅用于信息检索,并且不应该更改服务器的状态。在设计和构建REST API时,您必须注意安全方面。

    3.8K10

    Asp.Net Web API 2第五课——Web API路由

    如果你熟悉Asp.Net MVC,Web API的路由与Asp.Net MVC的路由是非常类似的。这主要的区别就是Web API使用的是HTTP方法,而不是URI路径来选择Action。...Routing Tables路由表   在Asp.Net Web API中,一个控制器就是一个处理HTTP请求的类,控制器的public 方法被叫做action方法或者简单的Aciton。...例如,对于一个Get请求,Web API会查找一个以“Get…”开头的动作,如“GetContact”或“GetAllContacts”等。这种约定只应用于GET、POST、PUT和DELETE方法。...注意,URI中的{id}片段如果出现,会被映射成Action的id参数。在这个例子中,这个控制器定义了两个GET方法,一个带有id参数的和一个不带有id参数的。...它对框架发出信号:这个方法不是一个动作,,即使它可能与路由规则匹配。 总结  本节课主要是提供了关于路由的整体概述。

    1.2K50

    CA1065:不要在意外的位置引发异常

    和所有派生项 System.ArgumentException(仅从带有索引的 Get) KeyNotFoundException(仅从带有索引的 Get) 事件访问器方法 事件访问器应是不会引发异常的简单操作...否则,可能会丢失哈希表中的项。 采用参数的 GetHashCode 版本可能会引发 ArgumentException。 但是,Object.GetHashCode 应始终不会引发异常。...ToString 方法 调试器使用 System.Object.ToString 来帮助以字符串格式显示有关对象的信息。 因此,ToString 不应更改对象的状态,也不应引发异常。...从静态构造函数引发异常应具备充分的理由(如安全问题)。 终结器 从终结器引发异常将导致 CLR 快速失败,从而中断过程。 因此,应始终避免在终结器中引发异常。...何时禁止显示警告 如果冲突是由异常声明而不是引发的异常造成的,则可禁止显示此规则发出的警告。 相关规则 CA2219:在异常子句中不引发异常 另请参阅 设计规则

    64120

    CS 可视化: CORS

    如果您想了解有关 HTTP 请求和响应的更多信息,我之前写过一篇小博文,尽管我在示例中使用的是 HTTP/1.1 而不是 HTTP/2,但这不会影响 CORS。...在这种情况下,只有使用 GET、POST 或 PUT 方法的请求将被允许!...当请求是 GET 或 POST 方法且没有自定义头部时,请求是简单的!任何其他请求,例如带有 PUT、PATCH 或 DELETE 方法的请求,将进行预检。...通过这种方式,我们可以缓存预检响应,浏览器可以在不发送新的预检请求的情况下使用它! 凭据 默认情况下,Cookie、授权头和 TLS 证书仅在同源请求上设置!...然而,我们可能希望在跨源请求中使用这些凭据。也许我们想在请求中包含服务器可以用来识别用户的 Cookie!

    13710

    老板与秘书的故事理解CORS(跨域),真的超级简单

    背景 一天下午,正认真的上(摸)班(鱼)呢,一个前端开发同事找到运维团队“后端服务是不是有什么异常啊,为什么我的访问不通呢?”“接口地址拿来~”运维工程师使用本地的postman进行调用。...在预检中,浏览器发送的头中标示有 HTTP 方法和真实请求中会用到的头。...API 发出所谓的预请求,并询问允许的选项:谁可以调用 API 以及可以发出什么类型的请求 API 发送带有此类选项的响应,并且(可选)包括浏览器应缓存这些依赖设置 如果前端应用程序及其尝试发出的请求位于允许列表内...,则浏览器会允许其通过 否则,请求将被拒绝,并出现我们在本文开头看到的错误 我们启动一个后端和前端来模拟问题: 后端的Go代码 package main import ( "encoding/json.../index.html") } 运行这段代码,前端html将运行为http://localhost:3333 使用浏览器访问,得到如下页面,打开F12调试,在文本框中输入书名,点击Add: 得到了与文章开始时类似的报错

    14310

    SQL命令 TRUNCATE TABLE

    试图编译引用只读表的TRUNCATE TABLE会导致SQLCODE -115错误。 注意,这个错误现在是在编译时发出的,而不是只在执行时发生。...Fast Truncate 如果可能,SQL优化器将执行高效的Fast Truncate表操作。 Fast Truncate操作删除表的范围,而不是单独删除每条记录。...这允许在事务期间进行大规模删除,而不会溢出锁表。 可以使用$SYSTEM.SQL.Util.GetOption(“LockThreshold”)方法确定当前系统范围的锁阈值。...在这些方法导入的SQL代码文件中发现的TRUNCATE TABLE命令将被忽略。 这些导入方法确实支持DELETE命令。 示例 下面两个动态SQL示例比较了DELETE和TRUNCATE表。...每个示例都创建一个表,向表中插入行,删除表中的所有行,然后向现在为空的表中插入一行。 第一个示例使用DELETE删除表中的所有记录。

    1.8K30

    django 1.8 官方文档翻译: 2-6-4 数据库访问优化

    在数据库中而不是Python中做数据库的工作 比如: 在最基础的层面上,使用过滤器和反向过滤器对数据库进行过滤。 使用F 表达式在相同模型中基于其他字段进行过滤。 使用数据库中的注解和聚合。..., 以及在适当的管理器和默认管理器中。...对于在模板代码中替换模型对象,这样会非常有用 —— 只要字典中带有的属性和模板中使用的一致,就没问题。...defer()和only()方法在你可以避免加载大量文本数据,或者可能要花大量时间处理而返回给Python的字段时,特别有帮助。像往常一样,应该先写出个大概,之后再优化。...使用QuerySet.update()和delete() 通过QuerySet.update()使用批量的SQL UPDATE语句,而不是获取大量对象,设置一些值再单独保存。

    1.1K30

    【前端 · 面试 】HTTP 总结(三)—— HTTP 请求方法

    请求方法分类总结 根据 HTTP 标准,HTTP 请求可以使用多种请求方法。 HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。...GET 请求可被收藏为书签 GET 请求不应在处理敏感数据时使用 GET 请求有长度限制 GET 请求只应当用于取回数据(不修改) HEAD 方法 与 GET 方法一样,都是向服务器发出指定资源的请求...DELETE 方法 DELETE 方法就是请求服务器删除指定 URL 所对应的资源。但是,客户端无法保证删除操作一定会被执行,因为 HTTP 规范允许服务器在不通知客户端的情况下撤销请求。...在HTTP协议中, PUT 方法已经被用来表示对资源进行整体覆盖, 而 POST 方法则没有对标准的补丁格式的提供支持。...响应 204 状态码表示这是一个操作成功的响应,因为响应中不带有消息主体。 OPTIONS 方法 OPTIONS 方法用于获取目的资源所支持的通信选项。

    57410

    Http 协议你都了解吗?

    但是我们在实际应用中常用的也就是 get 和 post,其他请求方式也都可以通过这两种方式间接的来实现。 GET 向指定资源发出“显示“信息。...使用GET方法只用于获取数据,而不应该改变数据本身,即不对数据进行操作和提交信息。 POST 向指定资源提交数据,请求服务器进行处理(例如提交参数/表单,或者上传文件)。...DELETE 顾名思义,请求服务器删除 URI 所对应的资源。 HEAD 与 GET 方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。...它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。 TRACE 回显服务器收到的请求,主要用于测试或诊断。...因为浏览器可能对请求地址做历史记录的存储,对于 GET 请求的登录,那其他人就可以直接在 URL 上拿到你的账号和密码了,而 POST 拿不到参数。 5.

    41410
    领券