0

このクエリをARELに変換しようとしています。

SELECT users.* FROM users LEFT OUTER JOIN (
      SELECT DISTINCT educations.user_id
      FROM educations
      INNER JOIN schools
      ON educations.school_id = schools.id
      WHERE schools.name = "school_name" ) AS x 
ON users.id = x.user_id WHERE x.user_id IS null

私はこのクエリを次のように連鎖できることを望んでいました:

class User < ActiveRecord::Base
  def find_by_school(school_name)
    ...
  end
end

myUser.find_by_school("school_name").where(...).joins(...)...etc

何か案は?

4

1 に答える 1

0

質問は少し古いですが、どういうわけかそれを見つけました...

あなたの質問を正しく理解できれば、教育を受けていない特定の学校のすべてのユーザーを取得したいと考えています...

もしそうなら、あなたの関係がすべて適切に設定されていることを考えると、私は次のルートに行きます:

class User < ActiveRecord::Base
  def self.find_educated_by_school_name(school_name)
    Education.pluck(:user_id).joins(:schools).where('schools.name = ?', school_name)
  end
end

User.where('users.id NOT IN (?)', User.find_educated_by_school_name('school_name'))

また、慣例により、 「特定のユーザーインスタンスmyUser.find_by_*で何かを見つける」ことを意味することに注意してください。したがって、ユーザー インスタンスを使用して何かを見つける必要があります。

一方User.find_by_*、「特定の基準によって、一般的にユーザーを見つける」ことを意味します。

私の言いたいことが明確であることを願っています!

于 2013-04-24T08:19:52.427 に答える