0

Rails 2.3.5 から 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

そして、私は Page オブジェクトを取得します (そして、それcomponent_instanceは関連付けられています。これは、他の方向から構築されるポリモーフィックな関連付けであるため、構築は複雑です)。

今私は得る:

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

スコープを調べると、私が見つけた唯一の違いは、proxy_scopeによって作成されたスコープを呼び出すin_context()と、2.3.17 の Page モデルと 2.3.5 のスコープが返されることです。

ここからどこへ行けばいいのかわからない。関連付けに基づいて決定を下す必要があるため、スコープをモジュールに抽出して各モデルに含めることはできませんproxy_owner

更新:スコープのコンテキスト内で使用できない拡張メソッドに問題があるようです。かなり奇妙ですが、それは理にかなっていると思います。残念ながら、スコープ定義とビルド拡張機能の両方で、関連付けコンテキストの知識が必要です。どんなアイデアも歓迎します:)

4

1 に答える 1

0

私はこれを回避する方法を見つけることができませんでした。結局、バグが発生した特定の状況でバグを回避する必要がありました。幸いなことに、それはアプリ内のいくつかの場所にしかありませんでした.

于 2013-05-09T08:28:41.630 に答える