Ruby on Rails – 使用符号数组获取对象关联值

例如,有模型:

class Activity < ActiveRecord::Base belongs_to :event end class Event < ActiveRecord::Base has_many :activities attr_accessible :foo end 

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

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

到目前为止,我有以下内容给我一个反思:

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

我可以通过belongs_to.klass(例如[Event])获取reflection类名的数组,或者通过belongs_to.name(例如[:event])获取belongs_to关联的符号数组。

考虑到从reflection中得到的东西,我如何获得对象的belongs_to的foo?

没有使用reflection,有没有更简单的方法来做到这一点?

我希望这很简单,我只想说明如何解决这个问题。 我也希望我有点清楚。 这是我的第一个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 

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