La crearea unei asociatii, ActiveRecord face aceste doua ipoteze:
In primul rand, numele clasei modelului catre care se refera asociatia dvs. se bazeaza direct pe numele asociatiei. De exemplu, daca imi scriu asociatia dupa cum urmeaza, ActiveRecord va cauta clasele numite Solicitant si Solicitant ca destinatar al asociatiei apartenentei la reuniune. omegle porno
clasa Intalnire <ApplicationRecord
apartine_to: solicitantului
appartine_to: solicitat
final
In al doilea rand, cheia externa din orice relatie de apartenenta_la va fi numita associationname_id. Aceasta inseamna, cum ar fi in exemplul de mai sus, ActiveRecord presupune ca tabela intalnirilor are o coloana requester_id care indica o tabela solicitant si o coloana requestee_id care indica o tabela solicitata.
Cu toate acestea, de multe ori trebuie sa ne infiintam asociatiile astfel incat un model sa poata face referire la un alt model cu doua nume diferite. le porno In exemplul meu de mai sus, atat solicitantul, cat si solicitantul sunt utilizatori stocati pe tabela utilizatorilor la care se face referire in modelul Utilizator. Prin urmare, un utilizator poate solicita intalniri (sa fie solicitantul) si sa primeasca cereri de intalnire (sa fie solicitantul). Pe de alta parte, o intalnire apartine unui solicitant si unui solicitant, ambii fiind utilizatori. porno escort
Aliasarea in modelul appartenenta la model
Asocierea din partea modelului intalnirii este o conexiune de baza unu-la-unu cu un element de aliasare:
# app / models /
meeting.rbclass Meeting <ApplicationRecord appartine_to: solicitant, class_name: ‘Utilizator’
apartine_to: solicitat, class_name: ‘Utilizator’
.. sophie davant porno . .. porno bizarre .
sfarsit
Definiti referinte in migrare
Pentru a aliasa un utilizator ca solicitant sau solicitant pe tabelul intalnirilor, referintele din tabelul de migrare ar putea arata ca mai jos:
clasa CreateMeetings <ActiveRecord :: Migrare
def change
create_table: meeting do | t |
t.references: solicitant, referinte:: utilizatori, straina_cheie: {to_table:: utilizatori}
t. little porno referente: solicitat, referinte:: utilizatori, strain_cheie: {to_table:: utilizatori}
end
end
end
Sintaxa foreign_key: {to_table:: association} asigura faptul ca coloanele: solicitant si: solicitant de pe tabelul intalnirilor nu cauta tabele cu numele „solicitant” si „solicitat”. Mai degraba, asociatia ar trebui sa indice de fapt tabelul utilizatorilor.
Aliasing in modelul has_many
In modelul Utilizator, nu putem folosi has_many: intalniri deoarece nu avem nicio coloana numita user_id in intalnirile de tabel. porno le coq Putem face referiri la intalniri ca „request_meetings” sau „requesting_meetings” astfel:
# app / models / user.rbclass User <ActiveRecord :: Base
has_many: requesting_meetings, class_name: „Intalnire”, foreign_key: „solicitant_id”
has_many: solicitat_meetings, class_name: „Intalnire”, foreign_key: „solicitant_id” .. porno thai .
Sfarsit
In acest fel, putem apela User.first. tiffany leiddi porno requested_meetings, precum si User.first.requesting_meetings. porno amateur mature De asemenea, putem defini o metoda de intalniri care returneaza combinatia de request_meetings si requesting_meetings.
Cu toate acestea, desi proiectul necesita o distinctie intre solicitanti si solicitati, nu necesita o distinctie intre intalnirile solicitate si intalnirile solicitate. Din punct de vedere al performantei, trebuie facute doua intrebari pentru a obtine intalnirile. porno cunilingus Prin urmare, am scris o metoda de clasa personalizata in modelul Utilizator astfel:
# app / models / user.rbclass User <ApplicationRecord
.. porno gay grosse bite . .. animaux porno . def meetings
Meeting.where („requester_id =? OR requestee_id =?”, id, id)
end . porno tuga .. . porno asmr ..
end
Stabiliti relatia in controler
Dupa ce asociatiile sunt infiintate in baza de date si modele, putem stabili cu usurinta relatia dintre intalniri, solicitanti si solicitanti. perfectgirl porno In proiectul meu, un administrator solicita intalniri cu utilizatori obisnuiti, care trimit bilete de asistenta si sunt mentionati ca „depunator”. Si un bilet de asistenta poate avea multe intalniri. In actiunea de creare a controlerului de intalnire, putem stabili cu usurinta relatia astfel:
# app / controllers / meetings_controller. porno young rbclass MeetingsController <ApplicationController ..
- porno brigitte lahaie
- public agent porno
- video porno ado
- tournage film porno
- hijab porno
- porno hot
- porno doux
- perfect porno
- young porno
- porno avec des animaux
- porno marc dorcel
- travesti porno
- porno bande
- porno drole
- roman photo porno
- xxl porno gratuit
- rose valerie porno
- 300 porno
- porno militaire
- video porno gay mature
. cap d’agde porno … porno petite bite def create
@meeting = @ ticket.meetings.build (meeting_params)
@ meeting. piscine porno requester = current_user
@ meeting.requestee = @ ticket.submitter if @meeting. salvati
MeetingMailer.meeting_schedule_notification (@meeting) .deliver_later
redirect_to @meeting, notice: „Intalnire solicitata”
altfel
redare:
sfarsit nou
sfarsit . .. . ..
sfarsit
Utilizati asociatii aliasate in vizualizari si mesaje de mail
Dupa ce solicitantul si solicitantul unei sedinte sunt stabiliti, putem prelua @ meeting. requester si @ meeting.requestee cu comoditate in punctele noastre de vedere si corespondenta. De exemplu, am configurat logica in intalnirile mele pentru a determina ce vizualizari sa redam in functie de relatia utilizatorului curent cu intalnirea.
# app / helpers / meetings_helper.rbmodule MeetingsHelper def set_meeting_with (meeting)
current_user == meeting.requester? meeting. requestee.name:
meeting.requester. name end def show_requestee_meeting_actions (intalnire)
returneaza doar daca current_user == meeting.requestee && meeting.requested? redare ‘intalniri / partajate / solicitari_actiuni’, intalnire: intalnire
sfarsit def show_requester_meeting_actions (intalnire)
returneaza cu exceptia cazului in care current_user == intalnire. requester redare ‘intalniri / partajare / cerere_actiuni ‘, intalnire: intalnire
sfarsit … … sfarsit
Acest lucru imi permite, de asemenea, confortul in mailers, unde am trecut doar prin argumentul intalnirii:
# app / mailers / meeting_mailer.rbclass MeetingMailer <ApplicationMailer
add_template_helper (MeetingsHelper) def meeting_schedule_notification (meeting)
@meeting =
mail de intalnire (catre: @ meeting.requestee. email, subiect: „#{@meeting.requester.name} A solicitat o intalnire Cu tine „)
sfarsit . .. . .. sfarsit
Sper sa utilizati asocierea aliasing ca unul dintre instrumentele dvs. de „automagic” furnizate de ActiveRecord ORM pentru a face interogarile de baza de date intuitive si convenabile in procesul dvs. de dezvoltare.
















































