0

zuerst aus, sorry für die noobish Frage. Ich migriere eine Sinatra-App nach Rails und habe ein bisschen Schwierigkeiten damit, da ich neu bei Rails bin.Einrichten einer has_many-Verbindung in Rails, die automatisch aktualisiert

Ich habe zwei Modelle, Benutzer und Auftrag. Ich habe in den Modellen eine has_many & assignes_to-Assoziation eingerichtet, und ich habe eine Benutzer-ID-Assoziationsspalte in Bestellungen hinzugefügt.

Aber ich fühle mich wie Benutzer sollten auch eine Assoziationsspalte haben? (Obwohl ich bin nicht sicher, wie das gründen)

Insbesondere möchte ich in einem suchen, um zu können, und sagen, ob der Kunde vor bestellt hat, als solche:

<% @orders.each do |order| %> 
<% if (order.user.orders > 1) %> Y<% end %> 
<% end %> 

Aber Während ich den Benutzer erreichen kann, kann ich nicht auf alle Bestellungen zugreifen, denen sie zugeordnet sind. Wie richte ich dazu eine Spalte ein, vorzugsweise mit automatischer Aktualisierung, wenn ihnen eine neue Bestellung zugewiesen wird?

+0

'belongs_to_many' Verein? Ein Auftrag kann mehr als einem Benutzer gehören? – augustoccesar

+0

@augustoccesar Ups, tut mir leid - Tippfehler. – Joe

Antwort

1

Ihr Modell ist genug:

class Order < ActiveRecord::Base 
    belongs_to :user # foreign_key user_id 
end 

class User < ActiveRecord::Base 
    has_many :orders 
end 

Ihre Ansicht Code:

<% @orders.each do |order| %> 
    <% if order.user %> 
    Y 
    <% end %> 
<% end %> 

Bevor wenn um Benutzer gehört nicht, würde order.user null sein, so dass, wenn es nicht gleich Null ist, Auftrag gehört dem Benutzer und Benutzer hat mindestens 1 Bestellung!

Andernfalls, wenn Sie ein Benutzer überprüfen möchten, jede Bestellung hat oder nicht, tun gerade dies:

user.orders.count > 0 
+0

Vielen Dank für Ihre Hilfe! Es funktioniert alles mit Count. Dummer Fehler in meinem Namen, nicht daran gewöhnt, all das Zeug für mich im Hintergrund zu erledigen! – Joe

1

Dies ist eine Eltern Kind Situation. Benutzer ist der Elternteil und Auftrag ist das Kind. Eltern speichern keine fremden Schlüssel, nur die Kinder. Wenn Sie die Modelle korrekt eingerichtet haben, sollte Benutzer has_many haben. Dann sollten Sie können:

user.orders 

Solange neue Aufträge erhalten die user_id richtig gespeichert, sollten alle korrekt funktionieren. Jetzt

+0

Danke für die Hilfe & Info :) Ja, alles funktioniert jetzt. – Joe

Verwandte Themen