通过以下方式进行多对多:从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)