0

我有一个带有 has_many 的 Rails 应用程序:通过 User.rb 和 Practice.rb 之间的关联,以 PracticeListing.rb 作为连接模型。

用户.rb

  has_many :practice_listings
  has_many :practices, through: :practice_listings

练习.rb

has_many :practice_listings
has_many :users, through: :practice_listings

练习清单.rb

  belongs_to :practice
  belongs_to :user

在其中一个控制器中,我将此范围方法称为 on user.rb,并传入 practice_id

 scope :lawyers_by_practice, lambda {|practice_id|
  joins(:practices).
  where( users: {practice_id: practice_id},
         users: {lawyer: true},)

  }

日志中的查询显示没有使用 practice_id

User Load (1.1ms)  SELECT "users".* FROM "users" INNER JOIN "practice_listings" ON "practice_listings"."user_id" = "users"."id" INNER JOIN "practices" ON "practices"."id" = "practice_listings"."practice_id" WHERE "users"."lawyer" = 't' AND (reputation IS NOT NULL) ORDER BY reputation DESC

您能解释一下我应该如何编写该范围方法以获得所需的结果吗?

设置当前模型后,我可以user.practice_ids为某个用户执行操作并获取 practice_ids ['2','4'] 数组

更新

我尝试了这种方式(不加入:practices),希望查询只选择具有相关 practice_id 的用户,但它返回数据库中的每个用户,即使是那些没有实践的用户

 scope :lawyers_by_practice, lambda {|practice_id|
  where( users: {practice_id: practice_id},
         users: {lawyer: true},)

  }

我也尝试过这种方式(通过加入:practice_listings 代替),但它返回每个练习列表的条目,再次忽略了我只想使用具有特定练习 ID 的人的事实

scope :lawyers_by_practice, lambda {|practice_id|
    joins(:practice_listings).
  where( users: {practice_id: practice_id},
         users: {lawyer: true},)

  }
4

1 回答 1

1

User没有practice_id,只有PracticeListing

scope :lawyers_by_practice, lambda {|practice_id|
  joins(:practices,:practice_listings).
  where( practice_listings: {practice_id: practice_id},
     users: {lawyer: true},)

  }
于 2013-05-29T22:08:53.693 回答