2016-05-11 6 views
-1

Ich bin neu auf Schienen und das ist eine sehr grundlegende Frage.Ich versuche zu verstehen, die Notwendigkeit von Fremdschlüssel und class_name und aber ich habe einige Probleme, dieses Konzept zu verstehen.
Die Verwendung von foreign_key und class_name in association

has_many :task, foreign_key: "created_by" 
has_many :memberships, class_name: "TaskMembership" 

Was die Verwendung von foreign_key und class_name ist hier.

+0

das sind die Optionen benutzerdefinierten Klassennamen und Fremdschlüssel zu definieren. – Pavan

+0

was ist die Verwendung ??? –

+0

Das habe ich schon gesagt. – Pavan

Antwort

0

Hier ist die Antwort auf Ihre Frage ist

Angenommen, Sie ein User-Modell und Post-model.And haben Sie müssen eine Zuordnung wie User has many post

User Model 
has_many :posts 

Post Model 
belongs_to :user 

Nehmen wir nun an Ihre Benutzer einige Autor ist also müssen wir so statt Benutzer einige aussagekräftigen Namen setzen wir Autor verwenden, sondern müssen angeben, welche Klasse sie bezieht

Post Model 
belongs_to :author, class_name: 'User' 

Jetzt Problem wird auftreten, weil Schienen für author_id aussehen Spalte in Tabelle Beiträge .So hier Fremdschlüssel wird in picture.we kommen finden haben user_id

Post Model 
belongs_to :author, class_name: 'User', foreign_key: 'user_id' 

mehr bessere Erklärung Siehe association

-1

has_many Assoziation wird für Beziehungen zwischen ein und vielen Typen in Schienen verwendet. Zum Beispiel, wenn Sie ein Modell User haben, das viele Profile haben kann, wird Ihre User Profilvereinigung viele haben.

class User < ActiveRecord::Base 
     has_many :profiles 
    end 

    class Profile < ActiveRecord::Base 
     belongs_to :user 
    end 

Wenn Sie einen Fremdschlüssel anders als user_id in der Profiltabelle haben, geben Sie explizit foreign_key an. Dasselbe gilt für den Klassennamen. Wenn Ihr Verknüpfungsname sich vom tatsächlichen Modellnamen unterscheidet, geben Sie den Klassennamen nach der Verknüpfung explizit an (wie bei den Mitgliedschaften). Hoffe es hilft.

+0

Ja ich verstehe, dass Klassenname explizit angegeben ist, aber wenn wir das tun müssen ??? meine Frage, wie werde ich wissen, wann Klassenname hier zu verwenden –

+0

Angenommen, ein Fall, wenn Sie ein Bank-Interaktionssystem implementieren müssen. Sie haben eine Klasse Benutzer, die eine generische Klasse ist und sowohl für Bankmitarbeiter als auch für Kunden verwendet werden kann. Sie haben ein Kommunikationsmodell und Sie möchten sowohl Bankmitarbeiter als auch Kundennummer darin speichern. Nun, wie werden Sie explizit alle Interaktionen des Mitarbeiters und alle Interaktion des Kunden erhalten? –

+0

Es ist nur ein Beispiel, Sie können viele verschiedene Szenarien haben, in denen Sie ID nicht verwenden, hat Ihren Fremdschlüssel im zugehörigen Modell. Sie können ein Adressmodell für Bank und Benutzer verwenden.Sie können sagen bank has_one Bank_Adresse, class_name: "Adresse" –

-1

in Ihrem Modell

class First < ActiveRecord::Base 
    has_many :seconds 
end 

class Second < ActiveRecord::Base 
    belongs_to :first 
end 

und in der zweiten Klasse Tabelle erstellen FIRST_ID Spalte

Verwandte Themen