通过以下方式进行多对多:从Associations :: CollectionProxy到AssociationRelation

通过与客户关系密切的客户关系(通过favorites.rb)我有多对多的关系,我想知道如何将CollectionProxy转换为AssociationRelation,这样我就可以获得与用户最喜欢的所有客户的关系。

或者只是简单地说,如何在AssociationRelation中获取它们 – 不必从CollectionProxy转换。

编辑:我正在寻找的只是一个列出所有客户的关系。 我意识到我的问题不同。 我如何与所有客户建立关系? – 不是与favorite_id,user_id等的关系 – 我想要一个纯粹与客户及其行的关系。

我可以像这样找到CollectionProxy:

user = User.last user.favorites # Gives me a CollectionProxy 

但是我如何找到最喜欢的客户作为AssociationRelation?

楷模:

user.rb:

 has_many :favorites, :dependent => :destroy has_many :clients, through: 'favorites' 

Client.rb

 has_many :favorites, :dependent => :destroy has_many :users, through: 'favorites' 

Favorite.rb

 belongs_to :user belongs_to :client 

您可以像在ActiveRecord::Associations::CollectionProxy上一样操作ActiveRecord::Associations::CollectionProxy

但如果你真的想拥有后者,那么只需要打电话,例如:

 user.favorites.all.class #=> Client::ActiveRecord_AssociationRelation 

我如何与所有客户建立关系?

您已定义关联:

 has_many :clients, through: 'favorites' 

因此,获得关联clients的关系就像:

 user.clients 

伟大的gemorder_as_specified可以轻松地做到这一点!

1:

 @favorites_collect_the_ids_in_array = @user.favorites.pluck(:client_id) 

… 然后:

2:

 @ar_of_all_favorites = Client.order_as_specified(id: @favorites_collect_the_ids_in_array).where(id: @favorites_collect_the_ids_in_array)