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 belong_to belong_to current_usercalendar(。

但是,我们想要分配给@versions

  • 所有与 相关的版本
  • 所有帖子来自
  • 属于的所有日历
  • @user

我正在考虑创建一个所有相关post id的数组并将其存储到@posts中,然后存储@versions所有版本,where id包含在@posts数组中。

但这似乎很沉重,与 Rails 的做事方式不一致。

知道我应该如何进行吗?

您可以使用 PaperTrail 提供的对象属性(item_typeitem_id (:

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

相关内容

  • 没有找到相关文章

最新更新