2017-10-14 6 views
-1

が作成したポストをCRUDする複数のユーザー私はユーザーという名前の2つのモデルがあり、ポストRailsのActive Recordの:別のユーザー

User.rb

class User < ApplicationRecord 
    has_many :posts 
end 

Post.rb

class Post < ApplicationRecord 
    belongs_to :user 
end 

今のところ、ユーザーは特定の投稿を作成、更新、削除することができます。

私はアクティブレコードを深く学びたいと思っています。投稿者が多くのユーザーと投稿を共有したい場合は、複数のユーザーが1つの投稿にアクセスしたいと考えています。

は、だから私は 管理者ポストモデルで 司会という名前の列を追加することを計画していた、管理者は、カンマを持つことになりますポストと司会を作成したユーザーのIDを保持するとともに、ユーザーのIDを分離投稿は共有されます。

可能な場合は、どのような関連付けを使用すればよいですか?

私はActive Record Associationsを実際の人生の例と理解しようとしています。なぜなら、ドキュメントではあまり明確ではないからです。

私はレールに新たなんだと私は5

+0

特殊なケースがありますが、所有者が投稿を公開しても編集可能(破棄可能、...)しかない場合は、現在の投稿者がログに記録されているかどうかを確認することができます所有者である。余分なモデルは必要ありません。 – Maxence

答えて

2

管理者がポストを作成したユーザーのIDとモデレータがカンマが持つユーザーのIDを分け持つことになります保持するレールを使用しています投稿は共有されます。

これはこれを実装するための間違った方法です。 いつでものコンマ区切りのリストをSQLの列にという名前で格納することにした場合、データベースが正しく設計されていない可能性があります。

可能な場合は、Active Record Associationを通じてこれを達成できますか?

はい、これはActiveRecordにとって非常に典型的な使用例です。多対多の関連付けが必要です。これはhas_many :throughまたはhas_and_belongs_to_manyのいずれかで簡単に実現できます。この場合、リレーションシップに属性を追加することができるので、has_many :throughが最適です(「モデレータ」または「管理者」権限など)。

ユーザーがPostPermissionsモデルのようなものを通じてポストに参加する必要があります。詳細については

class User < ApplicationRecord 
    has_many :post_permissions 
    has_many :posts, through: :post_permissions 
end 

class Post < ApplicationRecord 
    has_many :post_permissions 
    has_many :users, through: :post_permissions 
end 

class PostPermission < ApplicationRecord 
    belongs_to :post 
    belongs_to :user 

    # Permissions can be stored in any number of ways, 
    # an `enum` is one simple approach 
    enum permission: { :moderator, :admin } 
end 

を、ActiveRecordの協会ガイドのhas_many :through sectionをチェックしてください。

関連する問題