Rails简化了post方法

时间:2014-11-30 19:55:17

标签: ruby-on-rails post

在在线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?这种改变是否会对代码的可读性产生负面影响?

1 个答案:

答案 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和多态路由的实现。