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 –