Rails 3 link_to generator for:post,:put,&:delete?

nee*_*zer 11 rest http ruby-on-rails-3

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

我很困惑,为什么我link_to 'test', test_path(:test => test), :method => :post不工作(为什么它是GETting而不是POSTing).如上面的帖子所示,这是因为我没有Rails javascript文件,它处理动态制作表格:post,:put&:delete.

我不确定我是否特别喜欢依赖javascript为我这样做,因为我希望我的应用程序能够在禁用javascript时完全正常运行; 这就是我喜欢开发的方式(所以我知道我的所有Rails编程功能都能正常工作),当我用javascript连接我的应用程序时,我不必担心重复这个功能,因为我通常会擦除Rails生成的股票javascripts文件.

我从某处读到,从技术上讲,超链接(锚元素)应该只用于GET请求,并且那些按钮(作为表单元素的一部分)应该用于其他方法.

那么,我的两个问题:

  1. link_to ... :method =>当我的视图被呈现时,是否有一个宝石会在我的视图中重写任何表格元素?
  2. 如果没有,我将如何挂钩到视图解析器来编写自己的?(使用HAML,最好)

基本上,我想要的是在我的HAML文件中写这个:

= link_to 'Test Link', some_path(:with => some_resource), :method => :post
Run Code Online (Sandbox Code Playgroud)

...并且我的渲染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>
Run Code Online (Sandbox Code Playgroud)

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


我也很感激任何关于这个问题的原因的想法,特别是为什么Rails团队决定将这个功能与javascript绑定而不是通过纯HTML做到这一点?

ALW*_*ALW 22

看起来你真的想要一个单独的元素形式(在这种情况下,一个按钮).如果是这样,你想要button_to帮手:

button_to 'Test Link', 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
Run Code Online (Sandbox Code Playgroud)