在帖子中标记用户有很多关联

时间:2015-02-24 17:38:05

标签: ruby-on-rails ruby ruby-on-rails-4 has-many-through polymorphic-associations

在我的应用中,User可以Post到他的时间线和Tag其他用户的帖子(比如facebook)。在我的模型中,我必须知道谁在哪个帖子中标记了谁以及谁标记了(总是帖子的所有者)。我在这里找到了与hashtags模型类似的东西,但是我无法得到预期的结果。

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

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

1 个答案:

答案 0 :(得分:0)

我认为正确的事情是Tag属于两个用户,标记和标记。然后帖子可以拥有所有者,以及使用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的答案。如果结尾有效,则应自动保留。