假设我有以下代码:

@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/

10-13 09:41