假设我有以下代码:
@sites = Site.find(session[:sites]) # will be an array of Site ids
@languages = Language.for_sites(@sites)
for_sites是语言模型中的一个命名的_作用域,它返回与这些站点关联的语言,并且语言与使用has_many-through的站点关联。目标是@languages拥有与站点相关联的不同语言数组。
与其在第二行调用language对象,我理想地想说
@sites.languages
把同样的单子还给我。在Rails 2.1(或Edge)中,有没有什么方法可以做到干净?我知道关联和命名作用域可以扩展数组对象使其具有属性,但除非我缺少不适用于此的内容。任何这样做的插件都是受欢迎的,它不必是核心。
最佳答案
可以扩展site.find返回的数组。
class Site
def find(*args)
result = super
result.extend LanguageAggregator if Array === result
result
end
end
module LanguageAggregator
def languages
Language.find(:all, :conditions => [ 'id in (?)', self.collect { |site| site.id } ])
end
end
关于ruby-on-rails - 给定ActiveRecord对象数组,是否可以通过方法调用轻松地收集它们之间的关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/220126/