私はブログアプリを設計しています。ブログ投稿には多くのコメントがあり、ユーザーはコメントを書くときに前のコメントに返信することができます。この "replies_to"関係をどのようにモデル化できますか?
私には、「has_one」というコメントが返信先のコメントである「reply-to」コメントのようです。そこで、私はcommentsテーブルに "replies_to"フィールドを追加しました。私は次のコードを書いたが、うまくいかなかった:Railsの "one comment replies_to another"関係をモデル化するには?
# in migration
class CreateComments < ActiveRecord::Migration[5.0]
def change
create_table :comments do |t|
t.string :body
t.references :blog, foreign_key: true
t.references :user, foreign_key: true
t.references :replies_to, references: :comments, foreign_key: true
t.timestamps
end
end
end
# in model class
has_one :replies_to
どうやってこの関係をモデル化できますか?
申し訳ありませんが、私は前に自分自身をはっきりと表現していませんでした。コメント欄の "replies_to"フィールドを作成しました。しかし、あなたは正しい方向を私に指摘しました。私の構文が間違っているようです。 "has_one:replies_to、:class_name =>:Comment、:foreign_key =>" replies_to_id "という行に変更しました。私は単純な一方向の関係は "1対多数"の関係よりも良いと思うので、belongs_toとhas_many節はありません。私はこの権利をしていますか? –
私は元の意図がreplies_toを 'comments'テーブルの列として使うことを知りませんでした。私と同じようにあなたのマイグレーションで同じことをしたように見えますが、別のやり方です。 't.references:replies_to、references::comments、foreign_key:true'は' t.integer:replies_to_id'と 't.foreign_key:comments、column::replies_to_id'を書くより短い方法のようです。唯一の違いは、私は 'parent'を使い、あなたは' replies_to'を使いました。あなたのモデルでは、この場合、 'belongs_to'と' has_one'は互換性があると思います。 – arpie
ええ、ありがとう! –