在我的应用中,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
答案 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的答案。如果结尾有效,则应自动保留。