2016-06-04 5 views
0

Ich habe die folgenden Tabellen Schema:Wie kann ich ein Feld aus einer Viele-zu-Viele-Beziehung in Rails filtern?

Table_1 
    Name 
    Field_A 
    Field_B 

User_Table 
    Name 
    Field_C 
    Field_D 

Table_3 
    FK Table_1 
    FK User_Table 
    Field_E 

Alle Beziehungen funktionieren. Ich brauche so etwas wie dies zu tun:

Table1.where(table_3.FK_Table_1: @current_user) 

Grundsätzlich mag ich nur die Elemente zeigen, die die @current_user gehören. Ich verwende meinen Serializer, um alle Field_E zu bekommen, die zu Table_1 gehören, aber wenn ich 2 gleiche Artikel mit dem gleichen Table_1 habe, überschreibt es offensichtlich den Wert von Field_E. Ich will es alle Elemente zurück, die in Table_1 sind, die auch von der korrekt arbeitet @current_user

Mein aktueller Benutzer sind, also keine Sorgen, dass mit. Ich brauche nur Hilfe, wie man die where Aussage erreicht.

Jede Hilfe wäre willkommen

Antwort

1

Wie sind Ihre Modelle eingerichtet? Aus dem, was Sie beschreiben, müssen Sie angeben, dass Sie beitreten Table1 und Table3 und Filtern nach aktuellen Benutzer. Etwas wie:

class Foo 
    has_many :bars 
end 

class Bar 
    belongs_to :foo 
    belongs_to :user 
end 

# Joining and filtering 
Foo.joins(:bars).where(bars: { user: @current_user }) 
+0

Ja, das ist genau das, was ich mache, aber die 'where' Aussage gibt mir einige Probleme –

+0

Können Sie uns mehr Details geben? Was ist die Ausgabe? – dodecaphonic

+0

Die Ausgabe ist 'PG :: UndefinedTable: FEHLER: falta una entrada für die Tabla ' –

0

Sie mehr über die has_many :through Vereinigung von RoR guides herausfinden können:

class Table1 < ActiveRecord::Base 
    has_many :table3s 
    has_many :users, through: :table3s 
end 

class Table3 < ActiveRecord::Base 
    belongs_to :table1 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :table3s 
    has_many :table1s, through: :table3s 
end 

Dann können Sie @current_user.table1s rufen alle Datensätze in table1 zu erhalten, die zu @current_user gehört.

Beachten Sie, dass die Verwendung einer Join-Tabelle (in Ihrem Fall Tabelle3) eine Viele-zu-Viele-Beziehung impliziert (1 Tabelle1 kann zu vielen Benutzern gehören, 1 Benutzer kann viele Tabelle1 haben).

Verwandte Themen