2017-10-14 134 views
-1

我有兩個型號命名的用戶和後Rails的活動記錄:多個用戶通過CRUD操作不同的用戶

User.rb

class User < ApplicationRecord 
    has_many :posts 
end 

Post.rb

發佈的訊息
class Post < ApplicationRecord 
    belongs_to :user 
end 

截至目前,用戶可以創建,更新,刪除特定的帖子。

我試圖深入學習Active Record,並且希望單個帖子可以被多個用戶訪問,前提是帖子的創建者想要與許多用戶分享帖子。

所以我打算添加一個名爲管理主持人模型列,管理員將持有誰創造了職位和主持人將有逗號用戶的ID分離與誰的用戶的ID該帖子是共享的。

是否有可能通過活動記錄關聯實現這一點,如果可能的話,我可以使用哪種關聯?

我想了解活動記錄協會與現實生活中的例子,因爲在文檔中它不是很清楚。

我是新來的Rails,我使用Rails 5.

+0

給定的答案是完美的,雖然有一個特例:如果你想讓帖子成爲公開的,但只有所有者可編輯(可銷燬,...),你只能檢查當前帖子的所有者是否與登錄在所有者。你不需要任何額外的模型。 – Maxence

回答

2

管理員將持有誰創造了職位和主持人將有逗號用戶的ID分離用戶的ID,與誰帖子是共享的。

這是實現此目的的錯誤方法。 任何時間您決定在SQL列中存儲任何東西的逗號分隔列表,您可能會錯誤地設計數據庫。

是否有可能通過活動記錄關聯實現這一點,如果 可能使用哪種關聯?

是的,這是一個非常典型的ActiveRecord用例。你需要一個多對多的關聯,這很容易通過has_many :throughhas_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