Rails:在第三个模型中具有条件的急切负载相关模型

时间:2015-06-12 07:22:59

标签: ruby-on-rails redmine eager-loading

我非常坚持这个问题: 我有下一个模型(全部来自Redmine):

  1. 问题(has_many:journals)

  2. Journal(has_many:details,:class_name =>“JournalDetails”)

  3. JournalDetails

  4. 我希望获取上次更改问题状态的日期:保存在日记帐模型中的日期,但仅限过滤器更改状态我必须加入到JournalDetails。

    Issue.eager_load(:journals).eager_load(journals: :details)
    

    这是有效的,但期刊所有项目不仅仅是状态的变化 - 以及如何在不附加查询的情况下仅过滤状态的改变我不知道

    我的下一次尝试:

    Issue.eager_load({:journals => :details}).where("journal_details.prop_key = 'status_id'")
    

    在这种情况下,我不会遇到没有状态变化的问题。

2 个答案:

答案 0 :(得分:1)

这应该有效:

Issue.joins(journals: :details).where(details: { prop_key: "status_id" })

或者,您可以合并详细信息模型中的范围:

class JournalDetails
  scope :for_prop_key, -> (status_id) { where(prop_key: status_id )}
end

Issue.joins(journals: :details).merge(
  JournalDetails.for_prop_key("status_id")
)

答案 1 :(得分:0)

要获取所有在期刊详细信息中具有非null prop_key的问题:

class JournalDetails
  scope :with_non_null_prop_key, -> { where("prop_key IS NOT NULL") }
end

Issue.joins(journals: :details).merge(
  JournalDetails.with_non_null_prop_key("status_id")
)