【发布时间】:2019-05-15 20:18:49
【问题描述】:
我有一些跟踪更改的多态规则,我想查询最后一个(当前)规则。我知道我可以使用belongs_to 来跟踪它,但我想保留has_one。这是模块的一点点
has_many :rule_transitions, class_name: "#{name}AppliedRuleTransition", dependent: :destroy
has_one :current_rule_transition, -> { order created_at: :desc }, class_name: "#{name}AppliedRuleTransition", inverse_of: model_name.param_key.to_sym
has_one :current_rule, through: :current_rule_transition, source: :rule
我想查询current_rule,但是rule_transitions被全部查询。
我目前的尝试是使用 postgres 的FIRST_VALUE
scope :rule, lambda { |q|
joins(:current_rule)
.select("#{model_name.plural}.*, rules.id = FIRST_VALUE(#{model_name.param_key}_applied_rule_transitions.rule_id) OVER(PARTITION BY #{model_name.param_key}_applied_rule_transitions.id ORDER BY #{model_name.param_key}_applied_rule_transitions.created_at DESC)")
.where(rules: { slug: q })
}
不过,我对这个函数的理解不够好,这仍然不能满足我的需求。
【问题讨论】:
标签: ruby-on-rails postgresql rails-activerecord