在我的 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
belong_to
belong_to
current_user
的calendar
(。
但是,我们想要分配给@versions
:
- 所有与 相关的版本
- 所有帖子来自
- 属于的所有日历
- @user
我正在考虑创建一个所有相关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)