Erstellen Sie ein Benutzermodell und ein Zwischentabellen-Beziehungsmodell, um die folgende Funktion zu implementieren.
model/user.rb
.
.
def follow(other_user)
unless self == other_user
self.relationships.find_or_create_by(follow_id: other_user.id)
end
end
Als ich eine solche Follow-Methode erstellt und in der entsprechenden Aktion von relation_controller aufgerufen habe, ist ein Fehler im Titel aufgetreten.
Es wird gesagt, dass es keine Tabelle gibt, aber ich war verwirrt, weil ich anhand der Schemadatei bestätigen konnte, dass es eine erforderliche Tabelle gab.
Die Ursache war ein Problem mit der Migrationsdatei beim Erstellen der Beziehungstabelle
db/migrate/time_create_relationships.rb
class CreateRelationships < ActiveRecord::Migration[5.2]
def change
create_table :relationships do |t|
t.references :user, foreign_key: true
t.references :follow, foreign_key: true
t.timestamps
end
add_index :relationships, [:user_id, :follow_id], unique: true
end
end
Dies wurde durch den Teil verursacht, der die Spalte "follow_id" erstellt, den Teil, in dem "Foreign_key" von "t.references: follow, Foreign_key: true" wahr ist. Wenn Foreign_key true ist, wird überprüft, ob dieselbe Tabelle wie der ID-Name vorhanden ist, dh ob eine Folgetabelle nicht vorhanden ist. Es scheint also, dass ein Fehler ausgegeben wurde.
Als Lösung im entsprechenden Teil
db/migrate/time_create_relationships.rb
t.references :follow, foreign_key: { to_table: :users }
Es funktionierte korrekt, indem eine Tabelle geschrieben wurde, auf die verwiesen wird.
Bitte beachten Sie, dass die Migrationsdatei, die automatisch im Terminal mit den folgenden "Rails g-Modellbeziehungen" erstellt wird: Verweise "standardmäßig" Foreign_key: True "ist.
Recommended Posts