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)
如何仅显示当前用户的帖子和评论?
选项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)