Rails' link_to 是如何工作的?
How does Rails' link_to work?
来自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, two of which are optional的方法。但最后两个是散列,所以区分两者有点棘手,除非我们明确使用卷曲。所以我们需要注意是否尝试设置 url_options
或 html_options
。
url_options
和html_options
有什么区别?
- 您何时以及为何使用它们?
- 能举个简单的例子吗?
您可以在您的应用程序根目录中通过 运行 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
。它实际上与您使用它的视图无关。它知道 Profile
class 的实例在生成 URL 时应该映射到 /profiles/:id
路径.这样做的先决条件是您使用 resources
标记在 routes.rb
中声明 Profile
路由,例如resources :profiles
.
url_options
用于传递 URL 或其任何选项。它通常涉及 Rails 必须先执行才能呈现 HTML 的魔法。
html_options
用于将设置传递给 link 标签本身。实际路径本身在 url_options
中,而 id
、class
等都在 html_options
中。这是一个例子:
link_to "Profile", @profile, class: 'button'
文档是这方面的重要参考。查看它们:http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to
来自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, two of which are optional的方法。但最后两个是散列,所以区分两者有点棘手,除非我们明确使用卷曲。所以我们需要注意是否尝试设置 url_options
或 html_options
。
url_options
和html_options
有什么区别?- 您何时以及为何使用它们?
- 能举个简单的例子吗?
您可以在您的应用程序根目录中通过 运行 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
。它实际上与您使用它的视图无关。它知道 Profile
class 的实例在生成 URL 时应该映射到 /profiles/:id
路径.这样做的先决条件是您使用 resources
标记在 routes.rb
中声明 Profile
路由,例如resources :profiles
.
url_options
用于传递 URL 或其任何选项。它通常涉及 Rails 必须先执行才能呈现 HTML 的魔法。
html_options
用于将设置传递给 link 标签本身。实际路径本身在 url_options
中,而 id
、class
等都在 html_options
中。这是一个例子:
link_to "Profile", @profile, class: 'button'
文档是这方面的重要参考。查看它们:http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to