У меня есть некоторые полиморфные правила, в которых я отслеживаю изменения, и я хотел бы запросить самое последнее (текущее) правило.Я понимаю, что могу использовать own_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 })
}
Хотя я недостаточно хорошо понимаю эту функцию, и это все равно не дает мне того, чего я хочу.