モデルを親に関連付けるための基本的なレールパターン(ネスト?)
-
11-10-2019 - |
質問
私はRailsを初めて使用しており、Railsで利用できるツールを使用して、「複雑な」モデル(およびその関連付け)をどのように構築するかを理解しようとしています。次の例のシナリオをすばやく想像してください。 Users
1つのレースのメンバーです Team
. 。ユーザーは作成できます Cars
と Schedules
. 。これらの車にはあります Drivers
, Fuel
レベル、 Engines
と Wheels
. 。これらは Wheels
持ってる Tires
, Hubs
と MilesDriven
. 。あなたはアイデアを得る...
ネスティングについてのすべての警告を考えると、深さは1レベルしかありません...私は まだ 安らかになり、rails-yであり、ユーザーがビルドできるようにするUIを提示する方法と闘っています Car
と Tires
.
私たちにはあります 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
. 。その場合、ユーザーを選択するための非表示のフォームフィールド(またはドロップダウンメニュー)が動作するはずです。逆に、ユーザーがお互いの「車」にアクセスできないようにするために、認可チェックが必要になる場合があります