Ruby on rails 理解Rails ActveRecord关联:在where的结果上调用类方法

Ruby on rails 理解Rails ActveRecord关联:在where的结果上调用类方法,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我举了一个例子,通过我试图理解的关联来使用has\u many\u 假设有类(ActiveRecord::Base)Movie和Theater的子类,还有第三个类Showing,记录它们之间的关联(哪些电影在哪个影院放映)。显示的实现是 class Showing < ActiveRecord::Base def self.movies Movie.where( id: pluck(:movie_id) ) end def self.theaters

我举了一个例子,通过我试图理解的
关联来使用
has\u many\u

假设有类(ActiveRecord::Base
Movie
Theater
的子类,还有第三个类
Showing
,记录它们之间的关联(哪些电影在哪个影院放映)。
显示
的实现是

class Showing < ActiveRecord::Base
   def self.movies
     Movie.where( id: pluck(:movie_id) )
   end

   def self.theaters
     Theater.where( id: pluck(:theater_id) )
   end
end
这行得通,但我不明白为什么
theaters
是类
Showing
上的一个类方法,它返回正在某处放映的所有剧院
showings
是一种实例方法,因此如果
movie
属于类
movie
,则
movie.showings
应返回类
Showing
的一组对象。那么写下面的内容有什么意义呢

movie.showings.theaters

当我尝试它时,它会正确地返回电影正在播放的影院,但是既然
影院
是一个类方法,那么在
电影返回的任何东西上调用它有什么意义呢。showings

电影。showings
返回
showing
对象的ActiveRecord集合。您编写的类方法,如
self.theaters
,可以由显示
对象的任何ActiveRecord关系调用
Showing.Theates
类似于
movie.showings.Theates
,除了在第二个示例中,
Showing
对象的范围仅限于与给定的
电影有关联的对象


另一种思考ActiveRecord类方法的方式是,它们对记录集合进行操作,而实例方法对单个记录进行操作。

谢谢,这回答了这个问题,但它的行为似乎与通常的类方法不同。
movie.showings.theaters