【问题标题】:Questions regarding link_to function within Rails关于 Rails 中的 link_to 函数的问题
【发布时间】:2015-07-09 01:03:25
【问题描述】:

执行摘要

  1. 通过蛮力猜测,读取 API 并获得有效的“link_to”。
  2. 提供 API 和描述,并试图弄清楚我的蛮力猜测是如何起作用的!?

== 结束

我正在尝试学习“如何在 Rails 中阅读 API 文档”。一个给我带来很多麻烦的特定功能是 link_to 功能。简单明了,我只需要学习如何“读取 api 函数”,这个问题与此有关。

网址:http://apidock.com/rails/v4.0.2/ActionView/Helpers/UrlHelper/link_to

当前文档详细介绍了以下内容

1. link_to(body, url, html_options = {})
  # url is a String; you can use URL helpers like
  # posts_path

2. link_to(body, url_options = {}, html_options = {})
  # url_options, except :method, is passed to url_for

3. link_to(options = {}, html_options = {}) do
  # name
end

4. link_to(url, html_options = {}) do
  # name
end

最后,我想使用 DO 块添加一大堆 HTML 样式并利用 AJAX 到我的 link_to 功能。

这是行得通的,但我只是不明白为什么根据原型使用选项 #4 而不是选项 #3?

成功了:

<%= link_to session_path(@account.id), {remote: true, :method => :delete, id: "abc",style: "display:inline-block; top: 20px; color: red; outline: none;" } do %>
            <span class="glyphicon glyphicon-log-out" style: "display:inline-block; top: 20px; color: red; outline: none;"></span>
            <span id="nav_loginout_action" style= "top: 20px; color: none; outline: none;display:inline-block;margin-left: 5px;">
             Logout </span>
            <% end %>

这不是

但是,如果您注意到 {remote:true, method =&gt; delete} 用于 OPTIONS,{id: "abc",style: "display:inline-block; top: 20px; color: red; outline: none;"} 用于 HTML_OPTIONS

<%= link_to session_path(1), {remote: true, :method => :delete}, {id: "abc",style: "display:inline-block; top: 20px; color: red; outline: none;" } do %>
                <span class="glyphicon glyphicon-log-out" style: "display:inline-block; top: 20px; color: red; outline: none;"></span>
                <span id="nav_loginout_action" style= "top: 20px; color: none; outline: none;display:inline-block;margin-left: 5px;">
                 Logout </span>
                <% end %>

谁能解释如何阅读 Rails 文档?

特别是

这让我很困扰:

In the documentation OPTIONS = {} is specifically defined as ".... :data, :method and remote:true. 

在 OPTION 4 中,它需要一个 HTML_OPTION(**不是 OPTIONS,这是在选项 #3 ** 中特别要求的)。请参阅提供的 URL 链接

唯一并重复提到 OPTIONS 哈希的唯一地方是 OPTION 3!我最初尝试使用选项#3,但我不确定#name 是什么。那是另一个问题......(我想知道)。但目前的主要问题是 HTML_OPTIONS 如何神奇地表示 OPTIONS。

我担心我不知道如何阅读其中一些文档,因此我获得自助的能力有限。请帮忙。

【问题讨论】:

  • 这让我很困扰:OPTIONS = {} 在帮助中定义为“选项定义为 .... :data, :method 和 remote:true。在 OPTION 4 中它需要一个 HTML_OPTION (**不是 OPTIONS,这是在选项 #3 中特别要求的**)。

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

我理解您的担忧。我通过阅读源代码检查了为什么它(第一个 link_to 你给了)有效。他们实际上是在传递给link_to 的html 选项中检查remotemethod 键,而不是在url_options 中(remote 除外)。但是在文档中,他们列出了该字段可以采用的选项,而不是“html_options”,而是将其作为“选项”提供,这使得这些选项似乎适用于选项和 url_options,但不适用于 html_options。当然,它以您所说的方式处理此类信息似乎很神奇。 'url_options'和'options'也基本相同,我认为这是文档中的错误。

第二种情况的调用显然与任何可用的签名(参数列表)都不匹配。是的,块内的# name 实际上意味着应该在锚标签内的内容。我认为# link content 在那里更合适。

所以我认为这不是你(你确定如何阅读文档),就像你说的那样存在一些不一致之处。 :)

【讨论】:

  • 警告。 method 键入 URL 选项(url_optionsoptions)与用于 HTML 选项时的含义完全不同。对于 URL 选项,它表示生成的链接将链接到的控制器方法的名称。对于 HTML 选项,它表示 HTTP 方法(GET / POST / DELETE ...)。您的评论“它也可以带走它们”具有误导性,而且一点也不神奇;)
  • @vmarquet :是的,你说得对。我更新了答案,只包含remote,文档也让我明白了:D。对于 URL 选项,它成为一个普通的查询参数 (?method=delete),并不意味着要调用的控制器方法的名称。据我所知,它由action 选项表示。
【解决方案2】:

对于#3,options 是 URL 选项,因此它可能应该像 #2 中那样命名为 url_options。证明:rails source.

THIS WORKED”示例正常工作,使用#4 而不是#3 是完全正常的,因为您提供的第一个参数是session_path(@account.id),即不是散列,而 #3 第一个参数应该是散列。

您的“THIS DID NOT WORKED”尝试没有成功也是正常的,因为您在块之前传递了 3 个参数,并且没有 3 个参数的原型,然后是块。

Rails 文档概述

我同意文档有时不是很清楚,但通常您可以通过查看示例来猜测缺失的信息。

在您的情况下,您也可以简单地查看生成的 HTML。

如果仍然不清楚,唯一的解决方案是查看来源,就像我在上面所做的那样。

【讨论】:

    猜你喜欢
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多