2017-05-18 2 views
-2

Sagen wir, ich habe drei Klassen. Benutzer, Benutzerorganisation, Organisationen.Wie durch Active Records-Beziehung zu iterieren und Informationen darauf in Ruby on Rails zu finden?

Benutzer haben ihre Benutzer-IDs, verschlüsselte Passwörter usw.

UserOrganisation haben als Fremdschlüssel, Benutzer-ID auch als Fremdschlüssel organisationid. Organisationen haben ID, Organisationsname, Adresse usw.

Angenommen, ich habe eine Variable, die alle Daten der UserOrganisation enthält.

@user = User.where(email: "[email protected]") 

@userOrganisation = @user.userOrganisation 

Wie erhalte ich die Organisation ID aus @userOrganisation und die Namen von Organisation Tabelle mit der ID bekommen?

Ich möchte den Namen der Organisation als JSON

Antwort

1
class User < ApplicationRecord 
    has_many :user_organizations 
    has_many :organizations, through: :user_organizations 
end 

# rails g model user_organization user:belongs_to organization:belongs_to 
class UserOrganization < ApplicationRecord 
    belongs_to :user 
    belongs_to :organization 
end 

class Organization < ApplicationRecord 
    has_many :user_organizations 
    has_many :organizations, through: :user_organizations 
end 

Das schafft a many to many association zwischen User und Organization mit user_organizations als Join-Tabelle machen. Beachten Sie, dass die Spalten, Methodennamen und Zuordnungen (so ziemlich alles außer Klassen) snake_case sein sollten.

Um die Organisationen ein Benutzer das Mitglied von Ihnen verwenden kann:

user.organisations 

Rails den user_organizations Tisch für Sie automatisch verbinden.

Wenn Sie ein Array mit der ID und Name jeder Organisation wollen würden Sie tun:

user.organisations.pluck(:id, :name) 
+0

Ich würde Ihnen empfehlen, lesen Sie die [Ruby style guide] (https://github.com/bbatsov/ruby-style-guide) und buchstabieren Sie Ihre Fragen, bevor Sie sie posten . – max

+0

Das ist so eine perfekte Antwort. Vielen Dank. Ich lese jetzt den Ruby Style Guide. Behält das im Hinterkopf. –

0

@userOrganisation.reflections['assigned_to'].options[:foreign_key]

Dies sollte die ID erhalten, wenn Sie die ID tun wollen, aber wie ein Kommentar erwähnt , sollten Sie korrekte Verbindungen einrichten und so umgehen

Verwandte Themen