使用埃雷兹的答案
您要求的 - 我不了解 ruby,但@websites 中的每个网站都应该已经包含一个具有模拟的字段。
这就是你正在做的事情。
1 - 您获取用户、单个对象并获取其网站。凉爽的。用户看起来像这样(在伪代码中):
Object @user
{
Array[] websites = [(Website)site1, (Website)site2];
}
好吧,这很酷。所以user.websites
应该返回一系列网站。
2 - 您尝试从网站获取模拟。一个网站大概是这样的:
Object @website
{
Array[] simulations = [(Simulation)sim1, (Simulation)sim2];
}
嗯,怎么没效果?好吧,让我们分解一下你在做什么:
@user.websites.simulations
您正在使用websites
,它是一个数组,并试图引用一个属于website
类型而不是array
类型的变量。 @user.websites
是一个包含网站的数组对象,而不是网站本身。你想要的是得到@website.simulations
,而不是websites.simulations
。
所以第一步是建立一个网站。这很容易 - 一种方法是尝试从用户的网站数组中获取网站。
@User.websites[0] <-- may not be syntactically correct; I don't know ruby.
现在,如果您想获取所有网站,请使用循环遍历它们并将它们推送到新数组。再次在伪代码中:
@all_simulations = new Array();
for(@i=0;@i<count(@user.websites);@i++) //first loop through the websites
{
for(@q=0;@q<count(@user.websites[@i].simulations);@q++) //then loop through the simulations
{
@all_simulations.push(@user.websites[@i].simulations[@q]); //push the simulation into @all_websites
}
}
我们在这里所做的是进入user.websites
数组中的每个网站,然后从该网站获取每个模拟并将其放入我们的@all_simulations
变量中。如果您理解这个概念,您应该能够将此逻辑转换为有效的 ruby。