来自docs:
link_to "Profile", profile_path(@profile)
# => <a href="/profiles/1">Profile</a>
link_to "Profile", @profile
# => <a href="/profiles/1">Profile</a>
这里有很多事情要发生。首先,为#profile_path
资源生成方法Profile
。这些类型的方法一直都在生成。
然后在第二个示例中,省略了profile_path
方法。
Profile
资源相关联的视图?同样来自文档,link_to
的方法签名:
link_to(body, url_options = {}, html_options = {})
此外还有很多事情要发生。从ruby link_to
的角度来看,这是一个需要三个positional arguents的方法,其中两个是optional。但最后两个是哈希,所以除非我们明确使用curlies,否则区分两者是有点棘手的。因此,我们需要注意是否尝试设置url_options
或html_options
。
url_options
和html_options
之间的区别是什么?答案 0 :(得分:2)
您可以在应用根目录中运行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
类的实例应该在生成URL时映射到/profiles/:id
路径。这样做的前提条件是,您使用Profile
标记在routes.rb
中声明resources
路由,例如resources :profiles
。
url_options
用于传递URL或其任何选项。它通常涉及Rails在呈现HTML之前必须先执行的魔法。
html_options
用于将设置传递给链接标记本身。实际路径本身位于url_options
,而id
,class
等都位于html_options
。这是一个例子:
link_to "Profile", @profile, class: 'button'
文档是一个很好的参考。检查出来:http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to