0

我正在嘗試爲用戶創建在我的項目中喜歡內容的方式。要做到這一點,我成立了一個多態的關係如下通過多態類的關係獲取has_many的所有相關實例

喜歡錶

table "likes", force: :cascade do |t| 
    t.integer "likeable_id" 
    t.string "likeable_type" 
    t.integer "user_id",  null: false 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

車型

class User < ActiveRecord::Base 
    has_many :likes, dependent: :destroy 
    has_many :newsletters, through: :likes, source: :likeable, source_type: "newsletter" 
    has_many :gift_cards, through: :likes, source: :likeable, source_type: "gift_card" 
    has_many :stories, through: :likes, source: :likeable, source_type: "story" 
end 

class Like < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :likeable, polymorphic: true 
end 

class Newsletter < ActiveRecord::Base 
    has_one :like, as: :likeable, dependent: :destroy 
    has_one :user, through: :like, source: :likeable 
end 

class GiftCard < ActiveRecord::Base 
    has_many :likes, as: :likeable, dependent: :destroy 
    has_many :users, through: :likes, source: :likeable 
end 

class Story < ActiveRecord::Base 
    has_many :likes, as: :likeable, dependent: :destroy 
    has_many :users, through: :likes, source: :likeable 
end 

tldr:用戶必須通過那些喜歡很多喜歡和許多通訊,FIELDS禮品卡和故事。

我的問題,有了這個結構,什麼是讓用戶喜歡的一切的最佳方式?

回答

0

結束了計算。剛剛有一些小的語法錯誤

class User < ActiveRecord::Base 
    has_many :likes, dependent: :destroy 
    has_many :newsletters, through: :likes, source: :likeable, source_type: "Newsletter" 
    has_many :gift_cards, through: :likes, source: :likeable, source_type: "GiftCard" 
    has_many :stories, through: :likes, source: :likeable, source_type: "Story" 
end 

class Like < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :likeable, polymorphic: true 
end 

class Newsletter < ActiveRecord::Base 
    has_one :like, as: :likeable, dependent: :destroy 
    has_one :user, through: :like 
end 

class GiftCard < ActiveRecord::Base 
    has_many :likes, as: :likeable, dependent: :destroy 
    has_many :users, through: :likes 
end 

class Story < ActiveRecord::Base 
    has_many :likes, as: :likeable, dependent: :destroy 
    has_many :users, through: :likes 
end 
1

對我來說,這是非常難以遵循的一個領域與現實是相當直接。也許你有更大的理由來實現它是這樣的,但這是我對UserLikeGiftCard模型的建議(可能有幫助!)。

class User < ActiveRecord::Base 
    has_many :likes, dependent: :destroy 
    has_many :liked_giftcards, through: :likes, source: :giftcard 
end 

class Like < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :giftcard 
end 

class GiftCard < ActiveRecord::Base 
    has_many :likes, dependent: :destroy 
end 

class Story < ActiveRecord::Base 
    ...same as GiftCard 
end 

就我個人而言,我會發現這更容易遵循。它可以通過user.likes輕鬆訪問用戶喜歡的所有內容,並允許您分別通過user.liked_giftcards等單獨查看每個類別。

+0

結束了自己搞清楚了這一點,但感謝您的幫助! – SomeSchmo

+0

太棒了!請添加您的答案! –

相關問題