質問

私はRailsを初めて使用しており、Railsで利用できるツールを使用して、「複雑な」モデル(およびその関連付け)をどのように構築するかを理解しようとしています。次の例のシナリオをすばやく想像してください。 Users 1つのレースのメンバーです Team. 。ユーザーは作成できます CarsSchedules. 。これらの車にはあります Drivers, Fuel レベル、 EnginesWheels. 。これらは Wheels 持ってる Tires, HubsMilesDriven. 。あなたはアイデアを得る...

ネスティングについてのすべての警告を考えると、深さは1レベルしかありません...私は まだ 安らかになり、rails-yであり、ユーザーがビルドできるようにするUIを提示する方法と闘っています CarTires.

私たちにはあります Session & Cookie 私たちが自由に使えるだけでなく、隠されたフィールド。したがって、ユーザーがログインし、チームページにルーティングされます teams(current_user.team_id). 。その後、彼らはaを作成したい 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 ランタイム時に階層を上げることによって?

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

役に立ちましたか?

解決

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

この場合、承認コードが既にTHコントローラーで利用可能になっているため、ユーザー情報や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. 。その場合、ユーザーを選択するための非表示のフォームフィールド(またはドロップダウンメニュー)が動作するはずです。逆に、ユーザーがお互いの「車」にアクセスできないようにするために、認可チェックが必要になる場合があります

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top