如何链接到与用户关联的帖子(rails 4)?

时间:2013-08-16 20:38:31

标签: ruby-on-rails

第一部分:

我有一个索引页面,列出了我应用中的所有帖子。我希望能够点击链接标题并将其重定向到帖子显示页面。这是我的索引页面。

<% provide(:title, "All Posts") %>
<% @posts.each do |post| %>
    <div>
        <h2><%= link_to post.title.titleize, post %> by <%= post.author.name.titleize %></h2>
        <div><%= post.body %></div>
    </div>
<% end %>

当我尝试转到我的index页面时,我得到了

undefined method `post_path' for #<#<Class:0x007fc6df41ff98>:0x007fc6df436e78>

我很确定它是因为我的link_to中有post,但我不知道我会把它放到哪里让它去正确的地方。当我运行rake routes时,它会显示帖子#show action is

user_post GET    /users/:user_id/posts/:id(.:format)      posts#show

所以我尝试用post替换user_post_path(post),但后来我

No route matches {:action=>"show", :controller=>"posts", :user_id=>#<Post id: 4, title: "werwef", body: "erfwerfwerf", user_id: 3, created_at: "2013-08-16 20:05:43", updated_at: "2013-08-16 20:05:43">, :id=>nil, :format=>nil} missing required keys: [:id]

应该改变什么?

第二部分:

我有<%= post.author.name.titleize %>打印出发布帖子的用户名,我从我在帖子模型中定义的方法中获取

def author
    User.find(self.user_id)
end 

这是最好的方法吗?在我制作这个方法之前,我尝试了post.user.name,但这没有用,只是告诉我没有定义user的方法。谢谢你的帮助。

1 个答案:

答案 0 :(得分:4)

第一部分

由于这些是嵌套路径,您是否考虑过传递用户以及帖子?您的最终网址需要user_id以及post_id,因此您可能需要拨打以下电话:

<%= link_to user_post_path(post.user, post) %> 

文档在这里:Rails Guide on Nested Resources

摘自this SO question

第二部分

您可能会错过关联电话:

Post.rb

belongs_to :user

User.rb

has_many :posts

然后您可以使用post.user