如何导航嵌套的HABTM关系?

时间:2015-11-17 04:18:13

标签: ruby-on-rails activerecord has-and-belongs-to-many

在我的申请中:

  • User has_and_belongs_to_many Events
  • Video has_and_belongs_to_many Events

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

鉴于user,如何获取videos

我目前正在使用这个繁琐的解决方法:

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

是否有更好,更有效的方式来获取该用户的视频?你可以告诉我一个Rails noob ......

1 个答案:

答案 0 :(得分:2)

尝试设置“通过”关联:

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,并传递变量视图...否则你可以称之为something

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

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

如果你不打算将地图的结果分配给某些东西......那么通常最好只使用each例如:

events.each do |event|
  ...

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

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