Rails link_to无法在按钮元素中工作

时间:2014-07-20 03:17:57

标签: ruby-on-rails ruby controller routes link-to

我有以下HTML和.erb代码:

<button type="button" class="btn btn-default btn-lg"><%= link_to "Customer Information", customer_information_path %></button>

链接呈现正常,但点击时无效。

这是我的路线档案:

  devise_scope :user do
   root :to => "devise/sessions#new"
  end

  get "hub" => "pages#hub"
  get "customer_information" => "pages#customer_information"

这是我的页面控制器:

class PagesController < ApplicationController

 def hub
 end

 def customer_information
 end

end

代码不会抛出任何错误。

思想?

3 个答案:

答案 0 :(得分:7)

link_to助手会生成<a>元素而您无法在<a>内加<button>,这会违反the content model for <button>:< / p>

  

内容模型:
  短语内容,但必须没有互动内容后代。

interactive content包含<a>。如果您向浏览器提供<button><a></a></button>,则可能会将HTML重写为有效,或者可能无法让点击转到<a>

考虑使用button_to生成<button>而不是<button>link_to,或尝试在JavaScript中为<button>添加点击处理程序。使用button_to可能会使CSS变得复杂,因为button_to会添加大量额外标记(例如<form><div> s)。另一种选择可能是仅使用工具栏中的<a>元素,但将它们设置为按钮样式,然后您可以将link_to用于整个工具栏。

答案 1 :(得分:2)

以下修订工作:

<ul>
  <li><%= link_to "Customer Information", customer_information_path, :class => "btn btn-default btn-lg" %></li>
</ul>

所以看起来将类应用于link_to元素会生成CSS结果,并​​且仍然允许链接起作用。

答案 2 :(得分:2)

按钮

mu is too short的答案的基础上,您必须考虑button的目标 -

  

标签定义了一个可点击的按钮。

     

在元素中,您可以放置​​内容,例如文本或图像。   这是此元素与使用的按钮之间的区别   元素。

mu is too short提到,button元素是独立的(不能包含任何其他元素)。这意味着如果您想使用该按钮创建链接,您必须对您尝试实现的目标进行不同的思考

-

<强> button_to

Rails有两种方法可以实现&#34;链接&#34;:

您正在寻找的内容可能是button_to

<%= button_to "New", new_articles_path %>
# => "<form method="post" action="/articles/new" class="button_to">
#      <div><input value="New" type="submit" /></div>
#    </form>"

正如您在上面的演示中所看到的,这创建了一个简单的表单,允许您将数据发送到端点。对于链接来说,这似乎有些过分,但这是创建&#34; native&#34;的最佳方式。 HTML按钮。或者,您也可以样式link作为按钮

<%= button_to "Customer Information", customer_information_path, method: :get, class: "btn btn-default btn-lg"