Ruby on Rails - 使用符号数组获取对象关联值
Posted
技术标签:
【中文标题】Ruby on Rails - 使用符号数组获取对象关联值【英文标题】:Ruby on Rails - Get object association values with array of symbols 【发布时间】:2015-12-04 20:25:09 【问题描述】:例如,有模型:
class Activity < ActiveRecord::Base
belongs_to :event
end
class Event < ActiveRecord::Base
has_many :activities
attr_accessible :foo
end
我可以通过activity.event.foo获取活动的事件foo(很简单)。
但是我想创建一个通用函数,它首先确定一个对象是否具有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])获取反射的类名数组,或者通过belongs_to.name(例如[:event])获取belongs_to关联的符号数组。
根据我从反射中得到的信息,我如何获得对象的 belongs_to 的 foo?
有没有更简单的方法可以在不使用反射的情况下做到这一点?
我希望这很简单,我只是在讨论如何解决这个问题。我也希望我有点清楚。这是我的第一个 Stack Overflow 问题。
【问题讨论】:
delegate 会帮助你吗? 不确定委托是否会帮助我。这将要求我遍历每个模型并将属性委托给与它有 belongs_to 关系的每个模型。如果我已经有了关联的符号,似乎必须有一种方法来获得关联。object.association(belongs_to).foo
之类的东西。
【参考方案1】:
你可以这样做,但它并不完全漂亮:
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
或其他操作。
【讨论】:
这就是我想要的。完全忘记了object.send
。谢谢!以上是关于Ruby on Rails - 使用符号数组获取对象关联值的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试从 ruby on rails 上的表单获取输入时,我得到了简单名称的哈希数组瞬间。如何解决?
如何存储和比较:ActiveRecord 中的符号(Ruby on Rails)
使用 Ruby on Rails 从数据库中的 yaml 序列化字段中获取大小数