在在线bootcamp项目中,我创建了一个reddit克隆,并且我正在开发支持访问帖子的阶段。这是显示索引中所有帖子的方法。
def index
@posts = Post.all
end
以下是为每个帖子创建链接的代码,将用户定向到帖子正文:
<% @posts.each do |post| %>
<p><%= link_to post.title, post_path(post.id) %></p>
<% end %>
现在,文本指出&#34; Rails允许我们进一步简化这一步,允许我们完全跳过post_path方法,&#34;并且在单独的文件中生成的代码最终省略了post.id:
<% @posts.each do |post| %>
<p><%= link_to post.title, post %></p>
<% end %>
怎么可能? Rails是否只是假设有问题的帖子在每个元素中都有相同的id?这种改变是否会对代码的可读性产生负面影响?
答案 0 :(得分:1)
不,它没有假设id是相同的。每个link_to都有不同的对象,因此每个link_to都有不同的url / path。这只是一个更简单或更精确的&#34; pithier&#34;使用link_to的方式,就是这样。一点铁魔术来帮助懒惰的开发者。
link_to post.title, post
与此相同
link_to post.title, post_path(post)
或link_to post.title, post_path(post.id)
。
Rails有一个多态路由的概念,它用来辨别路径应该是什么,只需简单地使用对象&#34; post&#34;而不是说&#34; post_path(post)&#34;在link_to中已经足够了。
要进一步了解这一点,请查看Rails中link_to,url_for和多态路由的实现。