Rails 4 x paper_trail:使用嵌套资源按item_id过滤版本
在我的Rails 4应用程序中,我有以下模型:
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
gem来跟踪我的post
模型的变化,如文档中所述 ,它就像一个魅力。
版本显示在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个版本)都被拉出,无论它们与哪个post相关(最重要的是,这篇post
是否belong_to
属于belong_to
的calendar
current_user
,或不)。
但是,我们想要的是分配给@versions
:
- 所有版本都与之相关
- 所有post来自
- 所有属于的日历
- @用户
我正在考虑创建一个包含所有相关post
id
的数组并将其存储到@posts
,然后将所有版本存储在@versions
, where
id
包含在@posts
数组中。
但这似乎很重,并且与Rails的做事方式不一致。
有关我应该如何进行的任何想法?
您可以使用PaperTrail( item_type
和item_id
)提供的对象属性:
PaperTrail::Version .where(item_type: 'Post', item_id: Post.where(calendar_id: @calendars.ids)) .order('id DESC') .limit(10)