3

(これは私が使用している実際のコードではありませんが、これは私がやりたいことのアイデアを要約したものです)

class Connection < ActiveRecord::Base
  belongs_to :connection1, :polymorphic => true
  belongs_to :connection2, :polymorphic => true
end

class User < ActiveRecord::Base
  has_many :followers, :class_name => 'Connection', :as => :connection1
  has_many :followings, :class_name => 'Connection', :as => :connection2
end

私の質問は、返されるものが配列ではないように、「ネットワーク」と呼ばれるメソッドを作成する方法を知りたいということです。そのようです、

u = User.first
u.network # this will return a merged version of :followings and :followers

だから私はまだこれを行うことができます:

u.network.find_by_last_name("James")

到着予定時刻:

または、私の質問は、find_by メソッドを引き続き呼び出すことができるように、2 つの has_many アソシエーションをマージするメソッドを作成できるかどうかにかかっていると思います。

4

1 に答える 1

0

ユーザーのコレクションではなく、接続のコレクションが必要ですか?

必要な接続のコレクションである場合は、接続のクラス メソッド (または、そのようなものが好きな場合はスコープ) によって十分に機能するようです。

接続.rb

class Connection < ActiveRecord::Base
  class << self
    def associated_with_model_id(model, model_id)
      include([:connection1, :connection2]).
      where("(connection1_type IS #{model} AND connection1_id IS #{model_id})
            OR (connection2_type IS #{model} AND connection2_id IS #{model_id})")
    end
  end
end

user.rb

class User < ActiveRecord::Base
  def network
    Connection.associated_with_model_id(self.class.to_s, id)
  end
end

おそらくあなたが望むほど有用ではありませんが、いくつかのアイデアが得られるかもしれません.

于 2010-11-24T19:18:49.270 に答える