在 post 中对标记用户有很多关联

Has many association on tagging user in a post

在我的应用程序中,User 可以 Post 他的时间线和 Tag 其他用户在他的 post 中(类似于 facebook)。在我的模型中,我必须知道谁在哪个 post 中被标记以及谁做了标记(总是 post 的所有者)。我在这里找到了与主题标签模型类似的东西,但我无法用它获得预期的结果。

我的第一个问题是:下面的做法对吗?如果是这样,我如何在创建关联之前验证用户的存在?

class User < ActiveRecord::Base
    has_many :posts
    has_many :tagger_users, class_name: "Tag", foreign_key: "tagger_id"
    has_many :tagged_users, class_name: "Tag", foreign_key: "tagged_id"

class Post < ActiveRecord::Base
    has_many :tags

class Tag < ActiveRecord::Base
    belongs_to :tagger_user
    belongs_to :tagged_user
    belongs_to :post
    validates_presence_of :tagger_user, :tagged_user # This always return ["Tagger post can't be blank", "Tagged post can't be blank"] even when the users are correctly set

我认为正确的做法是让 Tag 属于两个用户,tagged 和 tag。然后 post 可以有一个所有者,以及使用 has_many :through

标记的用户列表
class User < ActiveRecord::Base
    has_many :posts

class Post < ActiveRecord::Base
    has_many :users, :through: :tags
    belongs_to :user

class Tag < ActiveRecord::Base
    belongs_to :tagger_user, class_name: user
    belongs_to :tagged_user, class_name: :user

    validates_presence_of :tagger_user
    validates_presence_of :tagged_user

关于验证检查 this 答案。如果结束是有效的,它们应该被自动持久化。