2017-06-07 5 views
0

Ich habe eine drei Tabellen: User, fruits, user_fruitsSo erstellen Sie einen neuen verknüpften Tabellendatensatz, ohne eine neue Instanz eines Datensatzes zu erstellen. Rails

Es gibt festgelegte Anzahl von Benutzern und Früchten in der Welt. Ich kann keine doppelten Früchte erzeugen. Sagen wir, die Früchte existieren bereits in der Datenbank, und ich möchte sie verwenden, damit ich keine neuen Früchte erschaffe.

Nehmen wir an, wir sind in einem Controller und alles, was ich tun möchte, ist eine neue Instanz von user_fruits erstellen. Ich möchte auch die verbundene Tabelleninstanz in der Destroy-Aktion löschen, aber nicht die eigentliche Frucht selbst. Ist das der Weg, es zu tun?

def create 
    user.user_fruits.create!(fruit: fruit) 
end 

def destroy 
    user.user_fruits.find_by(fruit: fruit).destroy! 
end 


private 

attr_reader :fruit 

def load_fruit 
@fruit = Fruit.find_by(color: red, sweetness: 100) 
end 

Ich möchte auch meine zerstören und erstellen, um einen Fehler zu melden, wenn es fehlschlägt.

Antwort

0

Wenn Sie nur eine neue Instanz erstellen möchten, dann können Sie einfach new oder build

def create 
    @new_fruit = user.fruits.new # or fruits.build 
end 

aktualisieren

neue Instanz von user_fruits? Dann sollten Sie so etwas wie versuchen ..

user.user_fruits.new 

def create 
    user.user_fruits.create!(fruit_id: @fruit.id) 
end 

def destroy 
user.user_fruits.find_by_fruit_id(@fruit.id).destroy! 
end 

Und wenn Sie Leser wollen, dann ersetzen trotzdem verwenden @fruit mit fruit

+0

ich bearbeiten meine Post. Sagen Sie, die Früchte existieren bereits in der Datenbank. Die Sache, die ich erstellen muss, ist die verbundene Tabellenzeile. – Jwan622

+0

Mit 'Obst' meinst du' @ fruit'? –

+0

Überprüfen Sie die aktualisierte Antwort, Sie brauchen nicht 'attr_reader' –

Verwandte Themen