Chainowanie AR::Relation i wywoływanie metody na if

Hej, mam taki kod:

if for_user? Order.where(user_id: user.id) else Order end.sum('amount')
Moje pytania:

  1. Czy jest lepszy sposób na chainowanie AR::Relation (w tym przypadku) niż if?
  2. Wydaje mi się, że wywoływanie metody na if … end jest popularne, ale czy czytelne dla Was?

Ad 2). Dla mnie bardziej byłoby

@order = for_user? ? Order.where(...) : Order @sum = @order.sum(:amount)

Trenary operator powoduje, że kod jest bardziej nieczytelny, więc pozostaje if.

class Order < #.... scope :for_user, ->(user) { if user where(user_id: user.id) else scoped end } end
a w ogóle to czemu nie User.has_many :orders?

Ja takie rzeczy piszę w takiej formie czasami:

[code]@order = Order.scoped
@order = @order.where(user_id: user.id) if for_user?

@sum = @order.sum(‘amount’)[/code]
Wtedy można łatwo dodać kolejne rzeczy.

@sevos Przykład był wymyślony na szybko, logika kodu jest trochę inna. Ale odpowiedzi mi pomogły, dzięki!