如何导航嵌套的 HABTM 关系?

How to navigate nested HABTM relationships?

在我的申请中:

所以一个用户可能拥有多个事件,每个事件都有很多视频,因此用户拥有这些事件视频的总和。

给定一个user,我怎样才能得到他们的videos

我目前正在使用这个麻烦的解决方法:

@events = @user.events
@videos = []
@events.map do |event|
  event.videos.map do |video|
    @videos.push(video)
  end
end

有没有更好更高效的方式获取那个用户的视频?你可能会说我是一个 Rails 菜鸟...

尝试建立一个 "through" 协会:

class User
  has_and_belongs_to_many :events
  has_many :videos, :through => :events

您现在应该能够:

user.videos

在您真正应该阅读的所有 Rails 指南中提供了有关关联的更多详细信息:http://guides.rubyonrails.org/association_basics.html :)


其他随笔(主要是你自称是菜鸟,这东西我教了一段时间);)

1) 你可能不需要 rails 变量名前的 @...如果你在控制器,并将变量传递给视图...否则你可以调用它 something

2) 如果你真的在做一些有最终结果的事情,你真的只需要使用 map 例如:

other_numbers = [1,2,3].map {|num| num + 1 }

如果您不打算将 map 的结果分配给某物...那么通常最好只使用 each 例如:

events.each do |event|
  ...

3) 在你的循环中,你获取一个数组 event.videos 然后使用 @videos.push 将每个视频单独添加到另一个数组,但你可以将数组添加在一起,例如:

@videos = []
events.each do |event|
  @videos += event.videos
end