【问题标题】:How does Rails' link_to work?Rails 的 link_to 是如何工作的?
【发布时间】:2017-02-12 21:22:31
【问题描述】:

来自docs

link_to "Profile", profile_path(@profile)
# => <a href="/profiles/1">Profile</a>
link_to "Profile", @profile
# => <a href="/profiles/1">Profile</a>

这里发生了很多事情。首先,有一个为Profile 资源生成的方法#profile_path。这些类型的方法一直在生成。

  • 它是如何工作的?
  • 在哪里可以阅读生成方法的文档?

那么在第二个例子中,profile_path 方法被省略了。

  • rails 是否知道它位于与 Profile 资源关联的视图中?
  • 它是怎么知道的?

同样来自文档,link_to 的方法签名:

link_to(body, url_options = {}, html_options = {})

这里还有很多事情要做。从ruby的角度来看link_to是一个取三个positional arguents的方法,其中两个是optional。但是最后两个是散列,所以要区分两者有点棘手,除非我们明确使用 curlies。所以我们需要注意是否尝试设置url_optionshtml_options

  • url_optionshtml_options 有什么区别?
  • 您何时以及为什么会使用它们?
  • 你能举个简单的例子吗?

【问题讨论】:

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


    【解决方案1】:

    您可以通过在您的应用根目录中运行rake routes 来查看您的所有路线。示例:

                          Prefix Verb      URI Pattern                                                             Controller#Action
                    negotiations GET       /negotiations(.:format)                                                 negotiations#index
                                 POST      /negotiations(.:format)                                                 negotiations#create
                 new_negotiation GET       /negotiations/new(.:format)                                             negotiations#new
                edit_negotiation GET       /negotiations/:id/edit(.:format)                                        negotiations#edit
                     negotiation GET       /negotiations/:id(.:format)                                             negotiations#show
                                 PATCH     /negotiations/:id(.:format)                                             negotiations#update
                                 PUT       /negotiations/:id(.:format)                                             negotiations#update
                                 DELETE    /negotiations/:id(.:format)                                             negotiations#destroy
    

    因此,您可以使用这些前缀中的任何一个,以 _path_url 结尾。我现在不会详细介绍_url,因为它与您的问题没有直接关系。

    Rails 能够通过其模型映射您传递到link_to 的任何对象。它实际上与您在其中使用它的视图无关。它知道在生成 URL 时,Profile 类的实例应该映射到 /profiles/:id 路径。这样做的先决条件是您使用resources 标签在routes.rb 中声明Profile 路由,例如resources :profiles.

    url_options 用于传递 URL 或任何选项。它通常涉及到 Rails 在呈现 HTML 之前必须先执行的魔法。

    html_options 用于将设置传递给链接标签本身。实际路径本身进入url_options,而idclass 等都进入html_options。这是一个例子:

    link_to "Profile", @profile, class: 'button'
    

    文档对此提供了很好的参考。看看他们:http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to

    【讨论】:

      猜你喜欢
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      相关资源
      最近更新 更多