如何在 Ruby 中有条件地委托 Active Records

How to conditionally delegate Active Records in Ruby

是否可以根据条件逻辑将一个函数或一系列函数委托给多个其他对象之一?

例如:

class Item
    has_one :thing
    has_one :other_thing

    delegate :foo,
             :bar
             to: :[thing or other_thing]
end

在这种情况下,我希望将操作 foo 和 bar 委托给事物,或者基于某些条件逻辑委托给其他事物。

可能相关:Active Record with Delegate and conditions

是的。

除了其他对象,函数可以委托给其他函数。

例如:

class Item
  has_one :thing
  has_one :other_thing

  delegate :foo,
           :bar
           to: :correct_thing

  def correct_thing
    [conditional] ? thing : other_thing
  end
end

如下所示:

class Item
  has_one :thing
  has_one :other_thing

  delegate :foo,
           :bar
           to: :thing if: thing_condition?

  delegate :foo,
           :bar
           to: :otherthing if: otherthing_condition?
end