Frage

Ich habe eine seltsame Situation die Notwendigkeit einer doppelten inneren Verknüpfung beteiligt sind. Ich habe die Abfrage versucht, ich brauche, ich weiß nur nicht, wie Schienen es tun zu machen.

Die Daten

  • Konto (has_many: sites)
  • Site (HABTM: Benutzer, belongs_to: Konto)
  • User (HABTM: Seiten)
Ignorieren

, dass sie HABTM sind oder was auch immer, ich kann sie HABTM oder has_many machen. Durch

Ich möchte in der Lage sein zu tun,

@user.accounts

oder

@account.users

Dann natürlich soll ich in der Lage sein zu tun,

@user.accounts < @some_other_account

Und dann haben @ user.sites umfassen alle Webseiten, die auf @some_other_account.

Ich habe mit HABTM und has_many getüftelt: durch, aber kann es nicht bekommen, was ich will

.

Im Grunde muß ich mit einer Abfrage am Ende wie folgt (von phpMyAdmin kopiert geprüft und Arbeiten.):

SELECT accounts.* 
FROM accounts
INNER JOIN sites ON sites.account_id = accounts.id
INNER JOIN user_sites ON sites.id = user_sites.site_id
WHERE user_sites.user_id = 2

Kann ich das tun? Ist es auch eine gute Idee, diese doppelte haben beitreten? Ich gehe davon aus, es wäre besser, wenn Benutzer die Verbindung mit Konten haben zu beginnen, und dann Sorgen über @ user.sites immer statt, aber es funktioniert besser für viele anderen Dinge, wenn es die Art und Weise gehalten wird, ist es (Benutzer <-> Sites).

War es hilfreich?

Lösung

Ich denke, es ist am besten, benutzerdefinierte Methoden für diese zu schaffen, anstatt zu versuchen, Schuh-Horn es in einen Verein. Zum Beispiel.

# in user.rb
def accounts
  Account.all(:include => {:sites => :users}, :conditions => ["users.id=?", self])
end

def add_account(other_account)
  other_account.sites.each do |site|
    self.sites << site
  end
end

# in account.rb
def users
  User.all(:include => {:sites => :account}, :conditions => ["accounts.id=?", self])
end

Nicht getestet, aber das sollte für Arbeit entweder eine HABTM oder has_many :through Verein. Es gibt einige Optimierungen Sie mit der Abfrage je nachdem, welche machen Sie gehen mit Ansatz.

Einen Tag könnten wir Unterstützung für tief verschachtelten has_many :through bekommen, die einige dieses handhaben würde.

Andere Tipps

Dies könnte nützlich sein, um Ihnen (Rails 2.x)

http://github.com/ianwhite/nested_has_many_through

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top