在我的申请中:
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 ......
答案 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