我通过与用户关系密切的客户关系(通过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
答案 0 :(得分:1)
您可以像ActiveRecord::Associations::CollectionProxy
上通常那样操作ActiveRecord_AssociationRelation
。
但如果你真的想拥有后者,可以打电话,例如all
:
user.favorites.all.class #=> Client::ActiveRecord_AssociationRelation
如何与所有客户建立关系?
您已定义关联:
has_many :clients, through: 'favorites'
因此,获得关联clients
的关系非常简单:
user.clients
答案 1 :(得分:0)
伟大的宝石order_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)