1

時間追跡アプリケーションがあります。

Hour属しているProject。そして、 aは aProjectに属しているProjectStatusため、フィールドがありますproject_status_id

ここで、Hour モデルをスコープして、特定のステータス (2 など) を持つプロジェクトに属するすべての時間をフィルター処理したいと考えています。

私の Project モデルには、次のスコープがあります。

  #project.rb
  scope :continous, where(:project_status_id => '2')

私の時間モデルでは、次のスコープを試しましたが、常に空の配列を返します。また、基準を計算する時間があることもわかっています。

  #hour.rb
  scope :intern, joins(:project) & Project.continous

また、コンソールで生成された SQL 出力が少し奇妙に見えると思います。

1.9.2-p180 :003 > Hour.intern
  Hour Load (104.5ms)  SELECT `hours`.* FROM `hours` INNER JOIN `projects` ON `projects`.`id` = `hours`.`project_id`
  Project Load (6.1ms)  SELECT `projects`.* FROM `projects` WHERE (project_status_id <> 2)
  Hour Load (95.9ms)  SELECT `hours`.* FROM `hours` INNER JOIN `projects` ON `projects`.`id` = `hours`.`project_id`
  Project Load (1.0ms)  SELECT `projects`.* FROM `projects` WHERE `projects`.`project_status_id` = 2
  Hour Load (92.6ms)  SELECT `hours`.* FROM `hours` 
 => [] 

WHERE (project_status_id <> 2)を含むクエリとを含むクエリが 1 つずつあるのはなぜWHERE 'projects'.'project_status_id' = 2ですか?

彼はこの 2 つを互いに差し引こうとしているのですか? このスコープを機能させる方法についてのヒントはありますか? ありがとう

4

1 に答える 1