2016-07-26 8 views
0

Ich habe drei Modelle - Company, User und CompanyUser. Die Assoziationen sind wie folgt.Vereinigung für Modell - has_many: durch

Company.rb

has_many :company_users 
    has_many :users, :through => :company_users 

User.rb

has_many :company_users, :dependent => :destroy 
    belongs_to :company 

CompanyUser.rb

belongs_to :company 
    belongs_to :user 

Für current_user.company holen, was moddifications sind im Modell Vereinigung gemacht werden ?

Jede Hilfe wäre willkommen.

+0

können Sie die Ausgabe Sie bitte erhalten schreiben, während auf Schienen Konsole current_user.company? – power

+0

Sie können Ihre 'FK' nicht in das Benutzermodell setzen, also ersetzen Sie' gehört_to: company' mit 'hash_many: companies,: through =>: company_users' –

Antwort

2

es sein sollte:

has_many :companies, through: :company_users 

A has_many: durch die Verbindung oft eine many-to-many Verbindung mit einem anderen Modell einzurichten verwendet wird. Diese Zuordnung zeigt an, dass das Deklarationsmodell mit null oder mehr Instanzen eines anderen Modells verglichen werden kann, indem ein drittes Modell durchlaufen wird.

Also, wenn Sie erstellen drei Modelle und machen eine has_many :through Vereinigung Ich glaube, dass User will have many Companies und Company will have many Users.

Wenn Sie jedoch benötigen, dass der Benutzer nur einem company statt dem Erstellen des dritten Modells gehört, speichern Sie die company_id in der Tabelle users.

Update:

Jetzt, da Ihr Szenario A company can have may users und User belongs to a single company ist, müssen Sie zwei Modelle: User und Company. Ihr User Modell sollte ein Attribut company_id haben und dann company_id sollte nur in users Tabelle gespeichert werden. Dann werden die Verbände wie folgt:

class User < ActiveRecord::Base 
    belongs_to :company 
end 

class Company < ActiveRecord::Base 
    has_many :users 
end 

Dann können Sie current_user.company

tun können Sie weitere Informationen über Verbände im Sinne des Vereins RailsGuides

+0

Das Szenario ist wie folgt. Ein Unternehmen kann mehrere Benutzer haben. Der Benutzer gehört einer einzelnen Firma an. Was würde die Modellassoziation dafür sein, wenn ich current_user.copmany holen möchte? – prajeesh

+0

Die Antwort wurde aktualisiert – Deep

0

erhalten Sie getroffen haben,

Benutzer bereits Sie haben eine Verbindung mit dem Unternehmen über das Benutzermodell des Unternehmens, so dass der Benutzer viele Unternehmen entsprechend Ihren Assoziationen haben kann.

so,

class User < ActiveRecord::Base 

    has_many :company_users, :dependent => :destroy 
    has_many :companies, :through => :company_users 

    end 

current_user.companies finden Sie die Unternehmen geben.

Aber wenn Sie brauchen nur ein Unternehmen für einen Benutzer dann,

class User < ActiveRecord::Base 
     belongs_to :company 
    end 

nehmen belongs_to Unternehmen und company_id in Benutzer-Tabelle speichern,

then you can call, 

`current_user.company` 
0

Nach Ihrer Logik, denken ich Ihnen vielleicht muss eine neue Variable Sitzung current_company_user erstellen, die Objekt CompanyUser ist. Und dann holen Unternehmen durch:

current_company_user.company 
Verwandte Themen