如何使用Rails link_to POST到控制器并具有HTML类属性?

问题描述 投票:1回答:2

我在Apidock中查找了link_to但是根本无法获得正确的Rails语法来创建以下内容:

<a href="/benefits/create" class="btn btn-primary">All Changes Complete</a>

我有:

<%= link_to t('view.benefits.all_changes_complete'), { controller: "benefits", action: "create", method: :post }, { class: "btn btn-primary"} %>

上面的语法类型工作,但method: :post被添加到href并单击链接执行GET,导致以下结果:

<a class="btn btn-primary" href="/benefits/create?method=post">All Changes Complete</a>
ruby-on-rails ruby-on-rails-4
2个回答
3
投票

试试吧。

控制器是benefits然后如果你运行命令rake routes然后它将显示看起来像这样

的routes.rb

resources :benefits

Prefix Verb     URI Pattern                  Controller#Action
benefits GET    /benefits(.:format)          benefits#index
         POST   /benefits(.:format)          benefits#create

创建行动是benefits_path,当它去post方法比link_to将是

<%= link_to "All Changes Complete", benefits_path, method: :post,  class: "btn btn-primary"%>

它会生成HTML看起来像

<a rel="nofollow" data-method="post" href="/benefits" class="btn btn-primary">  All Changes Complete</a>

点击后,它的动作看起来像

POST   /benefits(.:format)          benefits#create

然后,如果你需要发送parameters然后link_to看起来像

<%= link_to "All Changes Complete", benefits_path(param1: 'value1', param2: 'value2'), method: :post, class: "btn btn-primary" %>

它会生成看起来像

<a rel="nofollow" data-method="post" href="/benefits?param1=value1&param2=value2" class="btn btn-primary">All Changes Complete</a>

用于接收参数

params[:param1]
params[:param2]

而已

希望能帮助到你


1
投票

When to use get request

  • 如果您没有更改状态,请使用get请求。如果您基本上显示信息。
  • 不要使用get请求来创建记录。它不是标准的轨道练习。如果您使用将从get请求创建记录的简单链接,则不会受到跨站点请求伪造的保护。

When to use post

如果要创建新记录(或通过补丁更改记录),请使用post。

  • 如果您没有收到请求,那么您基本上需要使用表单(但是您解决了问题)。像这样的东西:

form_tag({:controller => "benefits", :action => "create"}, :method => "post", :class => "btn btn-primary")

The purpose

  • 表明用户已查看过表单?这听起来像是检索信息,因此您可以通过命名路由使用get请求。
  • 您也可以使用辅助方法提供相同的信息,而无需使用命名路由。
  • 您还可以使用原始表单上的复选框,用户必须在提交表单之前勾选以表明他们已阅读表单等。
© www.soinside.com 2019 - 2024. All rights reserved.