我試圖找出一種有效的方法來在頁面上嵌入reddit樣式的註釋。我已經按照自己的意願建立了一切。但是,我很難弄清楚如何以有效的方式呈現評論。見我的電流以下部分:Rails 5:爲集合中的每個子對象呈現div
#_comment_list.html.erb
<div class="comment-list">
<h2>Comments</h2>
<ul>
<% @post.comments.each do |c| %>
<% byebug %>
<li><%= c.body %></li>
<% unless c.is_deleted == true %>
<%= render partial: "shared/comment_form", :locals => { commentable_type: c.class.name, commentable_id: c.id, post: @post.id } if current_user %>
<% end %>
<ul>
<% c.comments.each do |d| %>
<li><%= d.body %></li>
<% unless d.is_deleted == true %>
<%= render partial: "shared/comment_form", :locals => { commentable_type: d.class.name, commentable_id: d.id, post: @post.id } if current_user %>
<% end %>
<% end %>
</ul>
<% end %>
</ul>
</div>
顯然,這樣只會使只有一組孩子的意見,像這樣:
Post
Comment
Child Comment
Child Comment
Comment
...
我畫一個空白,設計明智,就如何使孩子們的孩子評論多次,因爲他們需要嵌套。
Post
Comment
Child Comment
Grandchild Comment
Great Grandchild Comment
Great Grandchild Comment
Child Comment
Comment
...
如果有人能指點我的方向去哪裏,我將不勝感激。
這是關於我的模型和關聯的一些信息,如果它有助於提出解決方案。
# Comment.rb
class Comment < ApplicationRecord
validates_presence_of :body
# validates :user_id, presence: true
belongs_to :user
belongs_to :commentable, polymorphic: true
has_many :comments, as: :commentable
def find_parent_post
return self.commentable if self.commentable.is_a?(Post)
self.commentable.find_parent_post # semi recursion will keep calling itself until it .is_a? Post
end
end
# Post.rb
class Post < ApplicationRecord
validates :user_id, presence: true
validates :forum_id, presence: true
belongs_to :user
belongs_to :forum
has_many :comments, as: :commentable
end
create_table "comments", force: :cascade do |t|
t.text "body"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "commentable_id"
t.string "commentable_type"
t.integer "user_id"
t.boolean "is_deleted", default: false, null: false
end
create_table "forums", force: :cascade do |t|
t.string "name"
t.text "description"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["user_id"], name: "index_forums_on_user_id", using: :btree
end
create_table "posts", force: :cascade do |t|
t.string "title"
t.text "description"
t.integer "user_id"
t.integer "forum_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["forum_id"], name: "index_posts_on_forum_id", using: :btree
t.index ["user_id"], name: "index_posts_on_user_id", using: :btree
end
這是一個超級有益的解釋。任何學習SQL技巧的機會對我來說都是一個加分。謝謝你,它確實幫了你。 – Antonio