2010-12-17 6 views
0

私はRailsが新しく、Railsで利用可能なツールを使って複雑なモデル(およびそれらの関連)を構築する方法を理解しようとしています。次の例のシナリオを簡単に想像してみましょう。UsersはONEレースTeamのメンバーです。ユーザーはCarsSchedulesを作成できます。これらの車は、Drivers,Fuelレベル、EnginesおよびWheelsを有する。これらは、Tires,HubsおよびMilesDrivenを有する。あなたは私のRESTfulとRails-yのこととCarを構築するためのユーザーを可能にUIを提示する方法でまだ闘争...アイデア...のみ1レベルの深さをネストに関するすべての警告が与えられモデルを親に関連付けるための基本的なレールパターン

を取得しますTiresとなります。

わたしたちは、私たちが自由に使っている分野と同様に、Session & Cookieを持っていることを知っています。ユーザーはログインし、チームページteams(current_user.team_id)にルーティングされます。次に、Carを作成します。これは車を作ることができるnew_team_car_path(current_user.team_id)へのルート...今私はこの車に車輪を追加したいです... new_team_car_wheel_path(current_user.team_id, car_id)などへのそのようなルートはそうですか?私はそうは思わない...しかし、鉄道の道は何ですか?また

、構築されたすべてのものは、チーム(およびユーザー)に、最終的には、関連付けられますように、それは「キャリー」にベストですteam_idおよび/またはuser_id協会ダウンTireまたはのすべての方法は、それがすることが妥当です実行時に階層の関連付けに従うことによってTeamを照会しますか?

私はこの質問への単一の答えはありません...

答えて

1

これは基本的なものであると確信しているが、最高のそれに近づく方法については、私は混乱しne​​wbnessています。あなたはセッション変数と隠しフィールドを使用して言及しました - それらは実行可能なアプローチであり、決定は特定の要件に基づいて行われなければなりません。あなたが最良の答えを見つけるのに苦労しているという事実は、あなたが代替案を喜んで考えているという点で良い兆候です。

この場合、認証コードがすでにコントローラで利用可能になっているため、URL内のユーザー情報またはその関連付けを渡す必要がないため、脚本があります。だから私はあなたのparamsからのユーザーとチームIDを削除し、current_userからそれらにアクセスしたい:

#のGET /車/:car_id /ホイール/新しい

def new 
    @car = Car.find(params[:car_id]) 
    @wheel = @car.wheels.build 
end 

#のPOST /車/:ユーザーが別のユーザーのCarへのアクセスを許可する必要がある場合car_id /ホイール

def create 
    @user = current_user 
    @team = @user.team 
    @car = Car.find(params[:car_id] 
    @wheel = @car.wheels.build(params[:car][:wheel]) 
    ... 
end 

唯一の問題はあります。その場合、ユーザーを選択するための隠しフォームフィールド(またはドロップダウンメニュー)が機能するはずです。逆に、ユーザーが互いの「車」にアクセスするのを防ぐために認証チェックが必要な場合があります

+0

okです。ありがとう!ですから、 'user' *と' team'を 'car'(または' wheel'、あるいは深くネストされたリソース)に埋め込むことは価値があると思いますか? 'belongs_to'チェーンを歩いて戻って' user'や 'team'を見つけ出すのとは対照的に、あなたが必要とするとき、そしてもしそれが最適化の理由であれば?あなたは常にDBに照会していませんか?または..? – Meltemi

+0

この特定の状況では、Devise(または何でも)はすべての要求に対してこれを行うので、ユーザーを見つけるためのパフォーマンスコストをすでに支払っています。だから私はあなたがリソースを入れ子にする必要はないと言っています。ユーザーとその関連を検出する組み込みの方法があるからです。 – zetetic

関連する問題