我正在渲染Posts
:
在posts_controller.rb中:
def show
@posts = Post.where("user_id = ?", id)
end
在show.html.erb中:
<ol>
<%= render @posts %>
</ol>
在_post.html.erb中:
<%= form_for [post, @comment] do |f| %>
<%= f.text_area :content %>
<%= f.submit "Post" %>
<% end %>
form_for
中的_post.html.erb
是有人可以为任何呈现的帖子添加评论。评论也是Post类。这意味着posts_controller
我需要@comment = Post.new(post_params)
之类的部分内容。如果我只渲染一个帖子,这不会有问题。但是,我正在渲染一个Posts集合,每个Posts都需要传递给它的@comment
实例变量。如何在每个帖子的@comment
中创建posts_controller
实例变量?我如何将这些@comments
传递给部分?什么是部分中form_for
中的正确代码?
答案 0 :(得分:1)
您应该为每个帖子明确构建评论,如下所示
def show
@posts = Post.where("user_id = ?", id)
@posts.each{|post| post.comments.build}
end
并在表格中使用相同的内容,
<%= form_for [post, post.comments.last] do |f| %>
<%= f.text_area :content %>
<%= f.submit "Post" %>
<% end %>
这将在呈现页面时为每个帖子构建注释,可以由post.comments.last
访问。在提交与帖子关联的评论表单之前,评论将不存在于数据库中。
注意:如果默认范围已更改,则需要修改post.comments.last
http://apidock.com/rails/ActiveRecord/Base/default_scope/class
答案 1 :(得分:0)
您应指定每个帖子包含/许多评论并构建那些
class Post
attribute :comments, type:Comment, typecaster: Comment, default: []
end
Class Comment
end
现在,您可以使用
进行简单渲染<%=@post.comments%>
PS : Do not keep comment as a post type if you want to avoid rendering comments for comments and so on.(You can use the same type as well)