0

Rails は初めてで、Rails で利用できるツールを使用して「複雑な」モデル (およびその関連付け) を構築する方法を理解しようとしています。次の例のシナリオを簡単に想像してください: UsersONE Racing のメンバーですTeam。ユーザーはCarsとを作成できますSchedules。これらの車にはDriversFuelレベル、EnginesおよびがありWheelsます。これらWheelsにはTiresHubsおよびがありMilesDrivenます。あなたはアイデアを得る...

ネストを 1 レベルだけ深くすることに関するすべての警告を考えると、 RESTful で Rails-y になり、ユーザーがwithを構築できるようにする UI を提示する方法にまだ苦労しています。CarTires

隠しフィールドと同様に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)、などへのルートですか?私はそうは思いません...しかし、Rail-y wayとは何ですか?

team_idまた、構築されたすべてのものは最終的にチーム (およびユーザー) に関連付けられるため、および/またはuser_id関連付けを までずっと「運ぶ」のが最善か、Tire それともTeam階層の関連付けに従ってをクエリするのが合理的か実行時に?

これは基本的なことだと確信していますが、初心者はそれに最善のアプローチ方法について混乱しています...

4

1 に答える 1

1

この質問に対する唯一の答えはありません。セッション変数と非表示フィールドの使用について言及しましたが、これらは実行可能なアプローチであり、特定の要件に基づいて決定する必要があります。最善の答えを見つけるのに苦労しているという事実は、代替案を検討する意思があることを示しているという点で、良い兆候です。

この場合、ユーザー情報またはその関連付けを URL で渡す必要がないため、有利になります。これは、承認コードによって既にコントローラーで使用できるようになっているためです。だから私はあなたのパラメータからユーザーとチームIDを削除し、それらにアクセスしますcurrent_user:

# GET /cars/:car_id/wheels/new

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

# POST /cars/:car_id/wheels

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

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

于 2010-12-17T20:36:44.817 に答える