2017-04-11 25 views
0

現在、記事を扱っているコメントモデルがあります。私はユーザーがコーヒーショップのレビューにコメントできるようにしたいと思っています。私は同じコメント表を使用することができますか、別のものを持っているべきですか(ジャンク感)。私は長い間、RoR(数週間)で構築してきたので、まだ基礎を掴もうとしています。複数のbelongs_toモデルのレール

routes.rbを(どのように)でしまうIの巣それらを

resources :coffeeshops do 
    resources :articles do 
    resources :comments 
    end 

または

resources :coffeeshops do 
    resources :comments 
    end 

    resources :articles do 
    resources :comments 
    end 

は私のモデルは次のようになります。

ユーザー

class User < ApplicationRecord 
has_many :comments 
end 

コメント

class Comment < ApplicationRecord 
    belongs_to :user 
    belongs_to :article 
    belongs_to :coffeeshop 
end 

記事

class Article < ApplicationRecord 
    has_many :comments, dependent: :destroy 
end 

コーヒーショップ

class Coffeeshop < ApplicationRecord 
has_many :comments, dependent: :destroy 

私はその後、私は一緒にユーザーとコメントを結びつけるために、外部キーを必要とすると仮定し、としています記事/コーヒーショップにコメントしてください。

答えて

6

多型関連を使用します。ルート/コントローラの設定に関するいくつかの詳細について

class User < ApplicationRecord 
    has_many :comments 
end 

class Comment < ApplicationRecord 
    belongs_to :user 
    belongs_to :commentable, polymorphic: true 
end 

class Article < ApplicationRecord 
    has_many :comments, as: :commentable 
end 

class Coffeeshop < ApplicationRecord 
    has_many :comments, as: :commentable 
end 

http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

https://rubyplus.com/articles/3901-Polymorphic-Association-in-Rails-5

http://karimbutt.github.io/blog/2015/01/03/step-by-step-guide-to-polymorphic-associations-in-rails/

+0

OKです。そして、ユーザーはまだ 'has_many:comments'を持っていますか? –

+1

@SimonCooper:そうです。もちろん、 'as::commentable'を使用します。 –

+0

セルジオは既に言及したように;はい。 Userモデルを含める答えを編集しました。 – Laurens

0

記事とコフィエフスの両方のコメントにコメントモデルを使用することができます(デフォルトでは、レールはIDをプライマリキーと外部キーとして使用するため、IDも使用すると仮定しています)、コメントテーブルにカラムを追加する必要がありますコメントタイプ(記事モデルとcoffeeshopモデルの2つの値タイプを設定するコメントモデルで列挙子を作成できます)。この列を追加しないと、変わったバグを見つけにくくなります。ここでは、同じidを持つcoffeeshopの記事や、その逆のコメントをコメントで見ることができます。

UPD:彼は列車モデルに列挙型を使用する際の小さなガイドです:http://www.justinweiss.com/articles/creating-easy-readable-attributes-with-activerecord-enums/あなたはそれを使わなくてはなりません実際のコメントフォームを追加しますが、背後にはバックグラウンドがあります。

+0

Okを理にかなっています。現在、私のコメント表は「article_id」列です。 「coffeeshop_id」の新しい列を追加できますか?または、記事やコーヒーショップのいずれかの値を持つコメントタイプの列を持っていますか? –

+0

この場合、おそらく多型関連を使用したいと思うでしょう。あなたのテーブルでは、基本的に整数としてcommented_resource_idを持ち、タイプ(enumがモデルで処理されますが、テーブルも整数です)。そして、あなたはbelongs_to関係で '多態性:真実'を設定したいと思います。実際には、これを理解するのに役立つ別のガイドがあります:https:// launchschool。com/blog/understanding-polymorphic-associations-in-rails –

関連する問題