我非常坚持这个问题: 我有下一个模型(全部来自Redmine):
问题(has_many:journals)
Journal(has_many:details,:class_name =>“JournalDetails”)
JournalDetails
我希望获取上次更改问题状态的日期:保存在日记帐模型中的日期,但仅限过滤器更改状态我必须加入到JournalDetails。
Issue.eager_load(:journals).eager_load(journals: :details)
这是有效的,但期刊所有项目不仅仅是状态的变化 - 以及如何在不附加查询的情况下仅过滤状态的改变我不知道
我的下一次尝试:
Issue.eager_load({:journals => :details}).where("journal_details.prop_key = 'status_id'")
在这种情况下,我不会遇到没有状态变化的问题。
答案 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")
)