Ruby on Rails - 获取带有符号数组的对象关联值

Ruby on Rails - Get object association values with array of symbols

例如,有以下型号:

class Activity < ActiveRecord::Base
    belongs_to :event
end

class Event < ActiveRecord::Base
    has_many :activities
    attr_accessible :foo
end

我可以使用 activity.event.foo 获取 activity 的事件 foo(足够简单)。

但我想创建一个通用函数,首先找出一个对象是否具有 belongs_to 关联,然后通过 belongs_to 关联获取该对象的 foo(假设所有对象都有一个 foo通过 belongs_to 协会)?

到目前为止,我有以下几点让我反思:

def get_foo(object)
    object.class.reflect_on_all_associations(:belongs_to).each do |belongs_to|
        return object.??????
    end
end

我可以通过 belongs_to.klass(例如 [Event])获取反射的 class 名称数组,或者通过 [=32= 获取 belongs_to 关联的符号数组](例如 [:event])。

根据我从反射中得到的信息,如何获取对象的 belongs_to 的 foo?

有没有不使用反射的更简单的方法?

我希望这很简单,我只是在思考如何解决这个问题。我也希望我有点清楚。这是我的第一个 Stack Overflow 问题。

你可以这样做,但它不是很漂亮:

def get_foo(object)
  object.class.reflect_on_all_associations(:belongs_to).map do |reflection|
    object.send(reflection.name).try(:foo)
  end
end

这将为您提供与该对象关联的所有 foo 的数组。您可以将其更改为不执行 map 并执行 first 或其他操作。