【问题标题】:Rails link_to not working within a button elementRails link_to 在按钮元素中不起作用
【发布时间】:2014-09-10 21:23:20
【问题描述】:

我有以下 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

代码不会抛出任何错误。

想法?

【问题讨论】:

  • app/views/pages/customer_information.html.erb 有视图吗?
  • 您能否补充一点关于为什么需要按钮的信息?
  • 是的,customer_information.html.erb 文件确实存在于我的视图中。
  • 那么,是否有可能丢失按钮并将链接样式设置为按钮?
  • 我暂时没有参考资料给你看,但是锚标签会将锚标签内的文本标记为超链接,所以点击锚标签外的按钮部分不会工作,因为按钮上没有链接。更多信息anchor tag

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


【解决方案1】:

link_to 助手生成一个&lt;a&gt; 元素,你不能将&lt;a&gt; 放在&lt;button&gt; 中,这将违反the content model for &lt;button&gt;

内容模型:
短语内容,但不得有交互式内容后代。

interactive content 包括&lt;a&gt;。如果您向浏览器提供 &lt;button&gt;&lt;a&gt;&lt;/a&gt;&lt;/button&gt;,那么它可能会重写 HTML 以使其有效,或者它可能不会让点击到达 &lt;a&gt;

考虑使用button_to 来生成&lt;button&gt; 而不是&lt;button&gt;link_to,或者尝试在JavaScript 中将点击处理程序添加到&lt;button&gt;。使用button_to 可能会使您的CSS 复杂化,尽管button_to 会添加很多额外的标记(例如&lt;form&gt;s 和&lt;div&gt;s)。另一种选择可能是在工具栏中仅使用&lt;a&gt; 元素,但将它们设置为按钮的样式,然后您可以将link_to 用于整个工具栏。

【讨论】:

  • OP 实际上可以只使用link_to 而不是buttonbutton_to,因为链接在导航中而不是在form 中。我认为这更像是一个链接问题的样式,同时正如您在答案的第一部分中指出的那样,它正在挖掘可靠的信息。
  • @vee 你是对的 - 我没有生成按钮元素,而是将按钮类应用于 link_to 方法并且它起作用了。感谢您的信息,感谢您的帮助。
  • @vee:我认为“另一种选择可能是在工具栏中仅使用 &lt;a&gt; 元素,但将它们设置为看起来像按钮的样式,然后您可以将 link_to 用于整个工具栏。”涵盖了这一点,也许我可以更明确。
  • @vee:别担心,我不是想挑起战斗或敌对,只是想知道我是否错过了什么或不清楚的地方。无论如何,我认为达斯汀的回答填补了我的任何空白,所以我们都很好。
【解决方案2】:

以下修订有效:

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

因此,似乎将类应用于 link_to 元素会生成 CSS 结果,并且仍然允许链接起作用。

【讨论】:

    【解决方案3】:

    按钮

    基于mu is too short 的回答,您必须考虑button 有什么用 -

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

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

    正如mu is too short 所提到的,button 元素是独立的(其中不能包含任何其他元素)。这意味着,如果您想使用按钮创建链接,则必须以不同的方式思考您要实现的目标

    --

    button_to

    Rails 有两种实现“链接”的方式:

    你要找的可能是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>"
    

    正如您在上面的演示中看到的那样,这创建了一个简单的表单,允许您将数据发送到端点。对于链接来说,这似乎有点过头了,但它是创建“本机”HTML 按钮的最佳方式。或者,您也可以将您的link样式设置为按钮

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

    【讨论】:

    • 感谢您提供此信息 - 作为后续问题,如果我要链接到静态页面,我应该只使用纯 HTML 还是继续使用 Rails 是最佳做法?
    猜你喜欢
    • 1970-01-01
    • 2011-05-27
    • 2015-03-11
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2017-06-11
    • 1970-01-01
    相关资源
    最近更新 更多