我希望當前用戶閱讀和購買他所在俱樂部中的帖子。 我很想做類似以下的事情,但是我讀過或嘗試過的東西沒有點擊過。我將使用這種類型的很多嵌套集合,我卡住了!
模式使用has_many進行收藏集::通過關係
class User < ActiveRecord::Base
has_many :memberships
has_many :clubs, :through => :memberships
has_many :products
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :club
class Club < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
has_many :events
class Event < ActiveRecord::Base
belongs_to :club
class Product < ActiveRecord::Base
belongs_to :user
has_many :posts
class Post < ActiveRecord::Base
belongs_to :product
belongs_to :event
帖子控制器
def index
@user = current_user
@posts_in_my_clubs = @user.memberships.collect { |a| a.products.posts}
帖子/ index.html.erb
@posts_in_my_clubs do |post|
給我的錯誤:
undefined method `memberships' for nil:NilClass
對此我並不感到驚訝。此外,我希望能夠僅選擇僅在特定事件中發佈的帖子等。
模型摘要:俱樂部有很多活動&用戶。用戶有許多產品,他們可以在不同的活動日期發佈數量。只有屬於俱樂部會員的用戶纔可以在俱樂部發帖或查看帖子。
我沒有在模型中重複數據,而是創建了關聯,這似乎使數據無法在ActiveRecord中創建集合。我在我的研究Association Join Models和Intelligent association mapping中發現了metawhere。這些鏈接讓我覺得我越來越接近。
編輯
我在簽署,只要能訪問所有我需要的數據,因爲我沒有試圖做這樣的集合。例如我可以通過檢查我是否是俱樂部的會員
def member?(club)
return !!self.clubs.find(club)
我是一個noob,所以我必須在這裏丟失一些明顯的東西。我需要將我的收藏分成幾個步驟嗎?即收集用戶俱樂部,收集用戶俱樂部產品,收集用戶俱樂部產品帖子...感謝
Logger.info
@user = current_user
logger.info @user
logger.info 'super secret message'
# @club_posts = @user.memberships.collect {|a| a.product.posts}
回報
#<User:0x5b202a0>
super secret message
當我刪除了評論,我得到的零再次錯誤,'產品'現在(進展!)。我當然以爲我之前登錄..這是晚了
首先解決「NilClass」錯誤的問題,因爲您明顯沒有'current_user'返回的用戶。您的控制器是否在before_fitler中正確認證用戶?如果您需要用戶,您是否在此操作中檢查是否已驗證用戶身份? – MBO 2011-06-06 08:34:13
再次閱讀我的評論 - 你的'@ user'變量保持爲零。你的收藏沒有問題。這是您的驗證碼的問題。在分配'@user = current_user'後,將'logger.info @ user'放入索引中。如果它輸出'nil',那麼'@ user'變量中沒有用戶記錄,所以它對集合和關係沒有任何問題。 – MBO 2011-06-06 18:43:16
謝謝,日誌記錄會幫助調試。 – thejonster 2011-06-07 03:09:18