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

ada*_*rsh -1 ruby ruby-on-rails ruby-on-rails-3

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

发布模型

belongs_to :user
has_many :comments 
Run Code Online (Sandbox Code Playgroud)

评论模型

belongs_to :post
belongs_to :user
Run Code Online (Sandbox Code Playgroud)

用户模型

 has_many :posts
 has_many :comments
Run Code Online (Sandbox Code Playgroud)

的routes.rb

 resources :posts do
     resources :comments
 end
Run Code Online (Sandbox Code Playgroud)

在控制器中

def index
    @post =  User.posts.all
    @comment = User.comments.all
end
Run Code Online (Sandbox Code Playgroud)

在视图index.html.erb中

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

<%@comment.each do |comment|%>
    <%=comment.content %>
<%end%>
Run Code Online (Sandbox Code Playgroud)

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

oj5*_*5th 6

选项1

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

def index
  @users = User.all
end
Run Code Online (Sandbox Code Playgroud)

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

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 %>
Run Code Online (Sandbox Code Playgroud)

选项#2 用于includes:

def index
  @users = User.includes(:posts, :comments)
end
Run Code Online (Sandbox Code Playgroud)

在你的意见:

意见#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 %>
Run Code Online (Sandbox Code Playgroud)

意见#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 %>
Run Code Online (Sandbox Code Playgroud)

视图#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 %>
Run Code Online (Sandbox Code Playgroud)