modello Rails di base per associare modelli ai genitori (nidificazione?)
-
11-10-2019 - |
Domanda
Sono nuovo di Rails e cercando di capire il modo in cui costruire modelli 'complessi' (e le loro associazioni) utilizzando gli strumenti a nostra disposizione in Rails. immaginare rapidamente il seguente scenario di esempio: Users
sono un membro della One Racing Team
. Gli utenti possono creare e Cars
Schedules
. Queste vetture hanno Drivers
, livelli Fuel
, Engines
e Wheels
. Questi Wheels
hanno Tires
, Hubs
e MilesDriven
. Si ottiene l'idea ...
In considerazione tutti gli avvertimenti circa la nidificazione solo 1 livello profondo ... I ancora lotta con il modo di essere riposante e Rails-y e presentare un'interfaccia utente che consente a un utente di costruire un Car
con Tires
.
So che abbiamo un Session
& Cookie
a nostra disposizione come campi così come nascosti. Quindi utente accede ... ed è indirizzato alla loro pagina squadra teams(current_user.team_id)
. Poi vogliono creare un Car
. questo rotte per new_team_car_path(current_user.team_id)
dove poter costruire una macchina ... ora voglio aggiungere una Ruota a questa macchina ... così fa questa strada a new_team_car_wheel_path(current_user.team_id, car_id)
, ecc, ecc ...? Io credo di no ... Ma, qual è il modo Rail-y?
Inoltre, come tutto costruito sarà associato, in ultima analisi, ad una squadra (e utente) è meglio 'carry' il team_id
e / o associazione user_id
tutta la strada fino alla Tire
o è ragionevole interrogare il Team
seguendo le associazioni della gerarchia in fase di esecuzione?
Sono sicuro che questo è roba di base, ma newbness mi ha confuso su come approccio migliore è ...
Soluzione
Non c'è una risposta univoca a questa domanda. Lei ha citato utilizzando le variabili di sessione e campi nascosti - quelli sono gli approcci praticabili, e la decisione dovrà essere in base alle esigenze specifiche. Il fatto che si stanno lottando per trovare la risposta migliore è un buon segno, nel senso che vi mostra sono disposti a prendere in considerazione alternative.
In questo caso si ha una gamba perché non c'è bisogno di passare le informazioni relative all'utente o delle sue associazioni nella URL, dal momento che il codice di autorizzazione rende già disponibili in th controllore. Così mi piacerebbe cadere l'utente e il team di ID dal params e accedervi da current_user
:
# GET / auto /: car_id / ruote / nuova
def new
@car = Car.find(params[:car_id])
@wheel = @car.wheels.build
end
e
# POST / auto /: car_id / ruote
def create
@user = current_user
@team = @user.team
@car = Car.find(params[:car_id]
@wheel = @car.wheels.build(params[:car][:wheel])
...
end
L'unico problema è se è necessario per consentire a un utente di accedere Car
di un altro utente. In tal caso un campo di modulo nascosto (o un menu a discesa) per selezionare l'utente dovrebbe funzionare. Al contrario, potrebbe essere necessario un controllo di autorizzazione per impedire agli utenti di accedere vicenda di `Car '