2013-02-18 49 views
0

我从Rails 2.3.5升级到2.3.17,遇到了一个相当模糊的问题。我用下面的扩展注入关联访问内的范围,并提供一个自定义生成器:在Rails中通过关联扩展插入范围2.3.17

module XYZFilterExtension 

    def in_context(context) 
    if proxy_owner.context == :abc && context != :admin 
     scoped(:conditions => {:startup => false}) 
    else 
     scoped({}) 
    end 
    end 

end 

module OtherExtension 
    def build_with_component_instance(attributes = nil) 
    attributes ||= {} 
    attributes.reverse_merge!(:parent_id => proxy_owner.component_instance.id) 

    instance = build 
    instance.build_component_instance 
    instance.attributes = attributes 

    instance 
    end 
end 

has_many :pages, :extend => [ABCExtension, OtherExtension] 

在Rails 2.3.5我可以打电话:

Something.pages.in_context(:abc).build_with_component_instance 

,我会得到一个页面对象(它与component_instance相关联,构建复杂,因为它是从另一个方向构建的多态关联)。

现在,我得到:

undefined method `build_with_component_instance' for #<Class:0x1151dcae8> 

检查的范围,我能找到的唯一的区别是,呼吁通过in_context()创建范围proxy_scope返回2.3.17页模式,在2.3的范围。 5。

我不确定该从哪里出发。我无法将范围提取到模块中以包含在每个模型中,因为我需要根据关联中的proxy_owner做出决定。

更新:看来问题是围绕范围内的扩展方法不可用。很奇怪,但我想这是有道理的。不幸的是,我的范围定义和构建扩展都需要知道其关联上下文。任何想法欢迎:)

回答

0

我最终没有找到一种方法来解决这个问题。最后,我必须避免发生特定情况时的错误。幸运的是,它只是在应用程序的几个地方。