コメントがネストされたテーブルがあり、comment_id
親コメントを指すフィールドがあります。コメントのモデルを入れhas_many :comments, :class_name => "Comment"
たので、ツリーがあります。問題は、Rails と ActiveRecord のすべての機能を使用して、データベースからコメント ツリー全体を取得し、json 形式で応答する方法です。私は祖先について知って
いますが、副次的な宝石のない解決策を見つけたいと思っています。Rails でツリーのような構造を操作するための最良の方法を学びたいと思っています。
アップデート:
ここで関連する質問を見つけて、そこからの回答を使用しました。モデルでメソッドを定義します
def self.get_tree(comments)
comments.map { |comment|
{:responses => get_tree(comment.comments), :user => comment.user, :text => comment.text}
}
end
そして、それを呼び出してツリー全体を取得します(いくつかの条件付き)
render :json => Comment.get_tree(Comment
.where('announce_id = ?', params[:id])
.where('comment_id is NULL'))
この実装により、このタスクにサイドジェムが必要ないことがはっきりとわかりました。しかし、現在の実装でも、すべてのコメントのプロパティをマップ内にリストする必要があります。で既存のオブジェクトを拡張する方法はあります{:responses => get_tree(comment.comments), :user => comment.user}
か? 配列の場合は << 、ハッシュの場合は .update を見つけましたが、comment
マップ ブロックの内部が何であるかわからないという結果になりました。配列、ハッシュ、またはオブジェクトのいずれか...