gpt4 book ai didi

http - :post, :put, & :delete? 的 Rails 3 link_to 生成器

转载 作者:可可西里 更新时间:2023-11-01 15:09:56 24 4
gpt4 key购买 nike

我最近遇到了这个问题:Rails 3 link_to (:method => :delete) not working

我很困惑为什么我的 link_to 'test', test_path(:test => test), :method => :post 没有工作(为什么它是 GETting 而不是 POSTing) .正如上面的帖子所暗示的那样,这是因为我没有 Rails javascript 文件,它可以动态处理 :post:put 的即时表单& :删除

我不确定我是否特别喜欢依靠 javascript 为我做这件事,因为我希望我的应用程序在禁用 javascript 的情况下仍能正常运行;这就是我喜欢的开发方式(所以我知道我的所有 Rails 编程功能都可以正常工作),当我用 javascript 连接我的应用程序时,我不必担心重复这个功能,因为我通常删除Rails 生成的标准 javascripts 文件。

我在某处读到,从技术上讲,超链接( anchor 元素)应该只真正用于 GET 请求,而按钮(作为表单元素的一部分)应该用于其他方法。

那么,我的两个问题:

  1. 是否有 gem 可以在呈现我的 View 时将我 View 中的任何 link_to ... :method => 重写为动态表单元素?
  2. 如果没有,我将如何连接到 View 解析器来编写我自己的? (最好使用 HAML)

基本上,我想在我的 HAML 文件中写下:

= link_to 'Test Link', some_path(:with => some_resource), :method => :post

... 并让我呈现的 HTML 输出结果如下:

<form action="some_path?with=some_resource" method="post">
<!-- insert appropriate _method hidden field here -->
<!-- add appropriate csrf token and whatnot -->
<button type="submit">Test Link</button>
</form>

... 这样所有具有已定义方法的 link_to 助手(因此,不会影响动词为 GET 的普通链接)将在 没有 javascript 的情况下工作?


对于这个问题的为什么部分,我也很感激任何想法,特别是为什么 Rails 团队决定将此功能与 javascript 绑定(bind)而不是通过纯 HTML 来实现?

最佳答案

看来您真的想要一个单一的元素形式(在本例中是一个按钮)。如果是这样,您需要 button_to 帮助器:

button_to '测试链接', some_path(:with => some_resource), :method => :post

这将生成一个表单,其中包含一个 input[type=submit] 元素。

如果没有 Javascript,您将无法使用“GET”以外的 HTTP 动词提交超链接。

如果您需要对 button_to 呈现的表单进行更多样式/控制,您可以这样做:

module LinksHelper
def link_form(text, destination, options = {})
form_tag(destination, :method => options.delete(:method)) do
<<-HTML
<!-- some HTML code here -->
<button type="submit">#{text}</button>
<!-- some more HTML code here -->
HTML
end
end
end

关于http - :post, :put, & :delete? 的 Rails 3 link_to 生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5315465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com