エレズの答えを使う
あなたはそれを求めました-私はルビーについて知りませんが、@websitesの各ウェブサイトはすでにシミュレーションを持っているフィールドを含んでいるはずです。
これがあなたがしていることです。
1-ユーザー、単一のオブジェクトを取得し、そのWebサイトを取得します。涼しい。ユーザーは次のようになります(擬似コード):
Object @user
{
Array[] websites = [(Website)site1, (Website)site2];
}
さて、それはクールです。したがってuser.websites
、一連のWebサイトを返す必要があります。
2-あなたはウェブサイトからシミュレーションを取得しようとします。Webサイトはおそらく次のようになります。
Object @website
{
Array[] simulations = [(Simulation)sim1, (Simulation)sim2];
}
うーん、どうして動かないの?さて、あなたがしていることを分解しましょう:
@user.websites.simulations
配列である、を取得し、型ではなく型websites
に属する変数を参照しようとしています。 Webサイト自体ではなく、Webサイトを保持する配列オブジェクトです。あなたが欲しいのは、ではなく、を取得することです。website
array
@user.websites
@website.simulations
websites.simulations
したがって、最初のステップはWebサイトを取得することです。これは簡単です。1つの方法は、ユーザーのWebサイト配列からWebサイトをフェッチすることです。
@User.websites[0] <-- may not be syntactically correct; I don't know ruby.
ここで、すべてのWebサイトを取得する場合は、ループを使用してWebサイトを反復処理し、新しい配列にプッシュします。再び擬似コードで:
@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
配列内の各Webサイトにアクセスし、そのWebサイトから各シミュレーションを取得して、それを@all_simulations
変数にスローすることです。概念を理解すれば、このロジックを有効なルビーに変換できるはずです。