2017-05-08 3 views
0

Ich versuche, die folgende Datenstruktur auf Saatgut:Rails viele zu viele, Samen Datensätze mit zusätzlichen Informationen

class Company 
    has_many :user_roles 
    has_many :users, through: :user_roles 
end 

class User 
    has_many :user_roles 
    has_many :companies, through: :user_roles 
end 

class UserRole 
    belongs_to :user 
    belongs_to :company 
end 

Neben den Feldern auch die Userroles Tabellen user_id und company_id hat das Feld „Rolle“, die besagt, ., ob der Benutzer ein „Mitglied“ oder „admin zu einem bestimmten Unternehmen

ich versuche, um die Tabellen zu Saatgut wie folgt:

u1 = User.create(name: 'Tester 1') 
u2 = User.create(name: 'Tester 2') 

e1 = Company.create(name: 'Company 1') 
e2 = Company.create(name: 'Company 2') 

ur1 = UserRole.create(role: 'admin', user_id: 2, company_id: 1) 
ur2 = UserRole.create(role: 'member', user_id: 3, company_id: 1) 
ur3 = UserRole.create(role: 'admin', user_id: 3, company_id: 2) 

Aber wenn ich versuche, um zu überprüfen, die UserR Die ole-Tabelle ist immer leer und es wird keine Verbindung zwischen den Tabellen hergestellt. Wenn ich versuche, Benutzer zu den Firmen direkt an, mit

e1.users << [u1, u2] 
e2.users << [u2] 

Dann wird die Userrole Tabelle zeigt, aber ich weiß nicht, wie die ‚Rolle‘ Informationen hinzuzufügen. Danke für Ihre Hilfe! :)

Antwort

1

But when I try to verify, the UserRole table is always empty and no connection is created between the tables.

Ihre UserRole Objekte werden höchstwahrscheinlich nicht erstellt werden, da die IDs nicht verfügbar sind. Um sicher zu gehen Verwendung create! statt create so erhalten Sie eine Ausnahme (create wird ohne Ausnahme false zurück, das heißt, es scheitert leise) und identifizieren den Fehler:

ur1 = UserRole.create!(role: 'admin', user_id: 2, company_id: 1) 
ur2 = UserRole.create!(role: 'member', user_id: 3, company_id: 1) 
ur3 = UserRole.create!(role: 'admin', user_id: 3, company_id: 2) 

Then the UserRole table shows, but I don't know how to add the 'role' information.

Sobald Sie eine erstellt Objekt können Sie ein Attribut auf verschiedene Weise aktualisieren (überprüfen here für weitere Informationen), die häufigste ist = von save gefolgt:

e1.role = "admin" 
e1.save 

oder update:

e1.update(role: "admin") 

Als Randbemerkung: sicherzustellen, dass Sie mit ids, verwenden Sie die Objekte, die Sie bereits erzeugt (zum Beispiel im Zusammenhang keine Fehler bekamen u1, e1) diese IDs zuzuweisen:

ur1 = UserRole.create!(role: 'admin', user_id: u1.id, company_id: e1.id) 
ur2 = UserRole.create!(role: 'member', user_id: u2.id, company_id: e1.id) 
ur3 = UserRole.create!(role: 'admin', user_id: u2.id, company_id: e2.id) 

Auf diese Weise unabhängig davon, welche ID zugeordnet ist (nicht vergessen, dass Löschen von Datensätzen nicht die Auto-numerische ID in der Datenbank nicht zurück), werden Sie immer eine gültige bekommen.

+0

Dies gelöst, @gerry, danke eine Tonne! –

+0

@OriginalBBQSauce Großartig! Froh, dass ich Helfen kann! Beim Seeding empfehle ich immer bang '!' Methoden (z. B. 'create!'), Um einen Fehler sofort zu identifizieren. – Gerry

Verwandte Themen