如何显示当前用户的帖子和所有帖子评论?

时间:2018-02-22 02:43:23

标签: ruby-on-rails ruby ruby-on-rails-3

我有很多用户,如何只列出一个帖子,还会显示其他用户的所有评论?

发布模型

belongs_to :user
has_many :comments 

评论模型

belongs_to :post
belongs_to :user

用户模型

 has_many :posts
 has_many :comments

的routes.rb

 resources :posts do
     resources :comments
 end
控制器中的

def index
    @post =  User.posts.all
    @comment = User.comments.all
end

在视图index.html.erb

<%@post.each do |post|%>
    <%=post.post_name %>
    <%= post.post_description %> 
<%end%>

<%@comment.each do |comment|%>
    <%=comment.content %>
<%end%>

如何仅显示当前用户的帖子和评论?

2 个答案:

答案 0 :(得分:6)

选项#1

您的用户模型have_many :posts和发布has_many :comments,以便您可以在控制器中执行此操作:

def index
  @users = User.all
end

并按用户调用每个帖子并通过帖子发表评论:

index.html.erb

<% @users.each do |user| %>
  <% user.posts.each do |post|%>
    <%= post.post_name %>
    <%= post.post_description %>
    <% post.comments.each do |comment| %>
      <%= comment.content %>
    <% end %>
  <% end %>
<% end %>

选项#2 使用includes

def index
  @users = User.includes(:posts, :comments)
end

在您的观点中:

观看次数<1

<% @users.each do |user| %>
  <% user.posts.each do |post| %>
    <%= post.post_name %>
    <%= post.post_description %>
  <% end %>

  <% user.comments.each do |comment| %>
    <%= comment.content %>
  <% end %>
<% end %>

观点#2:

<% @users.each do |user| %>
  <% user.posts.each do |post| %>
    <%= post.post_name %>
    <%= post.post_description %>
    <% post.comments.each do |comment| %>
      <%= comment.content %>
    <% end %>
  <% end %>
<% end %>

观点#3 我假设您的first_name模型中有User字段。

<% @users.each do |user| %>
  <%= user.first_name %> 

  <% user.posts.each do |post| %>
    <%= post.post_name %>
    <%= post.post_description %>

    <% post.comments.each do |comment| %>
      <%= comment.content %>
    <% end %>

  <% end %>
<% end %>

答案 1 :(得分:2)

我会尽力帮助你,让我们首先澄清一下你的问题,好吗?你想只显示创建用户的帖子,想要仅向帖子的所有者显示帖子,以及所有评论,那?或者您想列出所有帖子,并在帖子中列出评论?如果没有,你能举一个例子吗? 以Araratan给出的例子为例,哪些不符合您的要求? 你可以尝试这样的事情:

your users_controller.rb

 def index
      @users = User.all
    end

你的posts_controller.rb

def index
   @posts= Post.all
end

你的comments_controller.rb

 def index
      @comments = Comment.all
  end

在你的帖子中。 你可以把这个。

<% current_user.posts.each |post| %>
    #post fields like
    # <%= post.title %>
    <% post.comments.each do |comment| %>
        #comments fields like 
        # <%= comment.description %>
        #do you wanna show the author of comment?
    <% end %>
    #or, do you wanna show the author of post?
<% end %>
#from what I understand you want to show both, that?

您可以使用Araratan答案,但不是列出所有用户和所有用户的所有帖子,而是可以放置当前用户。如果您已经实现了登录的一部分。 我将举例并适应

选项#1

您的用户模型have_many :posts和发布has_many :comments,以便您可以在控制器中执行此操作:

def index
  @users = User.all
end

并按用户调用每个帖子并通过帖子发表评论:

index.html.erb

  <% current_user.posts.each do |post|%>
    <%= post.post_name %>
    <%= post.post_description %>
    <% post.comments.each do |comment| %>
      <%= comment.content %>
    <% end %>
  <% end %>

选项#2 使用includes

def index
  @users = User.includes(:posts, :comments)
end

在您的观点中:

观看次数<1

#but I think that's not what you want

  <% current_user.posts.each do |post| %>
    <%= post.post_name %>
    <%= post.post_description %>
  <% end %>

  <% current_user.comments.each do |comment| %>
    <%= comment.content %>
  <% end %>

观点#2:

#I think this is what you want


  <% current_user.posts.each do |post| %>
    <%= post.post_name %>
    <%= post.post_description %>
    <% post.comments.each do |comment| %>
      <%= comment.content %>
    <% end %>
  <% end %>