1

在我的應用中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

我認爲正確的事情是有一個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答案標籤用戶列表。如果結束是有效的,它們應該自動保持。

+0

謝謝@dgarcia它工作完美! – 2015-02-25 16:51:12