2

在我的Rails 4應用程序,我有以下型號:Rails的4×paper_trail:過濾器版本通過ITEM_ID嵌套資源

class User < ActiveRecord::Base 
    has_many :administrations, dependent: :destroy 
    has_many :calendars, through: :administrations 
end 

class Administration < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :calendar 
end 

class Calendar < ActiveRecord::Base 
    has_many :administrations, dependent: :destroy 
    has_many :users, through: :administrations 
end 

class Post < ActiveRecord::Base 
    belongs_to :calendar 
end 

我安裝了paper_trail寶石來跟蹤我的post模型更改爲the documentation解釋它就像一個魅力。

版本顯示在Calendars#Index視圖中,該視圖用作user的儀表板。

這裏是我的CalendarsController是如何設置:

def index 
    @user = current_user 
    @calendars = @user.calendars.all 
    @comments = @user.calendar_comments.order("created_at DESC").limit(20) 
    @versions = PaperTrail::Version.order('id DESC').limit(10) 
end 

正如你可以從上面的代碼推斷,問題是,數據庫中的所有版本(至少在過去的10個版本)被拉到,無論哪些帖子與他們有關(並且最重要的是,這是否是這個postbelong_to a calendarbelong_tocurrent_user,或不)。

然而,我們要的是分配給@versions:屬於

  • @user
  • 所有日曆相關
  • 所有帖子

    • 所有版本

      我想創建一個所有相關的數組post s ids並將其存儲到@posts然後存儲在@versions的所有版本whereid包含在@posts陣列中。

      但是這看起來很沉重,並不符合Rails的做事方式。

      有關我應該如何進行的任何想法?

  • 回答

    2

    您可以使用對象的屬性,通過PaperTrail(item_typeitem_id)提供的:

    PaperTrail::Version 
        .where(item_type: 'Post', item_id: Post.where(calendar_id: @calendars.ids)) 
        .order('id DESC') 
        .limit(10) 
    
    +0

    謝謝您的回答。這部分工作。好處:它過濾帖子,只顯示屬於屬於當前用戶的日曆的帖子的版本。剩下的問題:只要我們銷燬帖子,該帖子的所有相應版本也會消失。任何想法如何改善? –

    +0

    @TabaudClement我不認爲說它是「部分作品」是不對的。我的答案完全解決了你的問題的原始範圍,新的澄清不在原始問題的範圍內。請用你的新問題創建新的問題。另外考慮接受答案,因爲它解決了過濾問題 –

    +0

    夠公平。我在這裏創建了一個新問題:http://stackoverflow.com/questions/33722350/rails-4-x-paper-trail-keep-track-of-versions-after-item-is-destroyed –