0

我正在實現屬於用戶訂閱的標籤的所有卡片的提要,並且出現以下錯誤。這可能是微不足道的,但我無法確定需要什麼工作。創建Feed => NoMethodError:未定義的ActiveRecord_Associations_CollectionProxy方法

NoMethodError:未定義的方法`卡標籤:: ActiveRecord_Associations_CollectionProxy:0x007fbaa46239f8>

這裏是我的模型:

class User < ActiveRecord::Base 
    has_many :cards, dependent: :destroy 
    has_many :tags, through: :cards 

    has_many :subscriptions, dependent: :destroy 
    has_many :subscribed_tags, through: :subscriptions, source: :tag 
end 
class Tag < ActiveRecord::Base 
    has_many :taggings, dependent: :destroy 
    has_many :cards, through: :taggings 
    has_many :subscriptions, dependent: :destroy 
    has_many :subscribers, through: :subscriptions, source: :user 
end 
class Card < ActiveRecord::Base 
    acts_as_votable 
    belongs_to :user 
    has_many :taggings, dependent: :destroy 
    has_many :tags, through: :taggings  
    def self.tagged_with(name) 
    Tag.find_by_name!(name).cards 
    end 
    def self.tag_counts 
    Tag.select("tags.*, count(taggings.tag_id) as count"). 
    joins(:taggings).group("taggings.tag_id") 
    end 
    def tag_list 
    tags.map(&:name).join(", ") 
    end 
    def tag_list=(names) 
    self.tags = names.split(",").map do |n| 
     Tag.where(name: n.strip).first_or_create! 
    end 
    end 
end 

什麼我真的想要做的是current_user.subscribed_tags.cards運行,檢索我可以重新排序並輸出爲時間線的卡片陣列。

感謝

+0

要檢索的CURRENT_USER的subscribed_tags卡CURRENT_USER或數組的數組變量? – Astery

+0

woops,typo:current_user的subscubed_tags卡片數組 – Ghost

回答

1

subscribed_tags - 這是一個範圍(where(user: self)),你可以叫他們wherejoin但不是一個項目的方法。

你的情況,你想用一個scope

class Card 
    scope :with_subscription, -> { joins(tags: :subscriptions) } 
end 

# In controller 
current_user.cards.with_subscription.order('cards.created_at DESC') 

你能想象current_user.cards喜歡的Cards.where(user: current_user)另一種形式。一旦你告訴你將檢索Card數組 - 它不能被改變。你不能做user.cards.subscriptionsUser.where(id: user).cards.tags唯一你可以做它的過濾器。

接下來我們用joins(:subscriptions)進行過濾。它會給我們內部連接,所以我們得到的卡片屬於訂閱用戶。這是一個我們可以修改的範圍,例如一個訂單。

activerecord join associations

+0

我得到一個未定義的卡片類的s_subscriptions方法,當我考慮多餘的「s」時,我仍然得到錯誤...任何想法?在閱讀指南後,我是否真的在查詢返回所有卡片當前用戶訂閱的標籤 – Ghost

+0

我忘了冒號。再試一次。 – Astery

+0

仍然得到錯誤「意外'{',期待keyword_end作用域:with_subscription {連接(:訂閱)}」 我使用rails 4.2.1如果這是任何幫助 – Ghost

相關問題