1

次のようなコメントセクションをアプリに追加したいと思います。

response1
 response1a
 response1b
  response1b1
response2
 response2a
 response2b
 response2c
  response2c1
   response2c1a
    response2c1a1
     response2c1a1
      response2c1a1a
       response2c1a1a1

次のようなHTMLを使用してこれを行うと仮定します。

<div class="comment">
  Response1
  <div class="comment">
    Response1a
    <div class="comment">
      Response1a1
    </div>
  </div>
  <div class="comment">
    Response1b
  </div>
</div>

そしてこのCSS:

.comment { margin-left: 50px; }

コメントとそれらの相互関係を表すためにRailsで使用するデータ構造の問題はまだ残っています。このデータ構造に適したツリーデータ構造を表すためのRubyのネイティブサポートはありますか?または、このタスクに合わせてカスタマイズされたものを作成する必要がありますか?

4

5 に答える 5

4

ネストされたセットプラグインの1つを使用できます-awesome_nested_set最も積極的に保守されているようです。これらを使用すると、データベースへの1回の呼び出しでフルセット(すべての子孫を含む)を選択できます。

于 2009-07-23T17:42:36.577 に答える
3

このようなものについては、 acts_as_treeを調べることをお勧めします。

于 2009-07-23T17:38:11.127 に答える
2
class Post < ActiveRecord::Base
  belongs_to :parent, :class_name => 'Post'
end

移行:

create_table :posts do |t|
  t.string :body
  t.integer :parent_id
end
于 2009-07-23T17:37:23.220 に答える
2

あなたはacts_as_commentable_with_threadingプラグインを使用することを試みることができます-それはライアンベイツ(ポリモーフィックアソシエーションについてのRailsCastを参照)とawesome_nested_setのアイデアを使用します

于 2009-07-24T05:53:31.710 に答える
1

私はこのようなものをRailsに実装しなければなりませんでした。それほど難しいことではありません。ジョーの提案はほとんどそれをカバーしています。木の枝を動かすことを心配する必要がないので、あなたのケースは特に簡単です。応答が応答のツリーに追加されると、その応答は元の場所にとどまるか、(おそらく)削除されます。

このような状況では、gemやプラグインを使用するよりも自分で実装する方が実用的だと思います。

于 2009-07-23T18:07:52.877 に答える