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