У меня есть два отношения ActiveRecord, назовите их rel1
и rel2
. Каждый из них получает разные статьи joins
и where
.Примените ту же цепочку предложений isl к различным отношениям
Я хочу применить к каждой из них определенную идентичную последовательность предложений, и я не хочу повторять себя.
Один из способов сделать это было бы сделать функцию:
def without_orders rel
rel.joins("LEFT JOIN orders ON customers.id = orders.customer_id").where("customers.id IS NULL")
end
rel1 = Customer
rel2 = Customer
# add a bunch of clauses to rel1
# add some other clauses to rel2
rel1 = without_orders(rel1)
rel2 = without_orders(rel2)
В идеале, я бы не иметь without_orders
как отдельную функцию. Я бы как-то поставил joins
и where
в чем-то локальном на func
и применил эту вещь к rel1
и rel2
.
Возможно ли это? Если нет, то какой здесь подход?
Спасибо. Существует ли преимущество этого подхода в отношении одного из вариантов evanbikes? –
Это стандартный способ добавления похожих функций для всех моделей. – Swards
Я воспользовался вашим ответом из-за этого преимущества, но отметил другой как принятый, потому что он требует меньше кода и сохраняет логику локальной модели, что кажется более естественным. Сфера применения может иногда нуждаться в совместном использовании между моделями, но, скорее всего, они более распространены, чем нет. –