Ich habe eine Step
Klasse, die je nach model
ein Ursprung, ein Schritt oder ein Ziel sein kann. Und eine Route
Klasse, die einen Ursprung und Ziel wie unten enthält:ActiveRecord: dependent =>: Löschen mit falschem ID-Attribut
class Route < ActiveRecord::Base
has_one :origin, -> {where(model: "origin")}, class_name: "Step", :foreign_key => "origin_id", :dependent => :delete
has_one :destination, -> {where(model: "destination")}, class_name: "Step", :foreign_key => "destination_id", :dependent => :delete
Ich möchte die verknüpften Schritte löschen, wenn ich eine Route zu zerstören, aber ich habe diesen Fehler: ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: steps.origin_id
Wie kann ich erklären, AR dass es steps.id
und nicht steps.origin_id
finden muss?
Hier ist mein Schema.
create_table "steps", force: :cascade do |t|
t.string "model"
t.float "lat"
t.float "lng"
t.text "formatted_address"
t.string "vicinity"
t.string "name"
t.integer "distance"
t.integer "duration"
t.integer "tour_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "steps", ["tour_id"], name: "index_steps_on_tour_id"
create_table "routes", force: :cascade do |t|
t.integer "origin_id"
t.integer "destination_id"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "routes", ["user_id"], name: "index_routes_on_user_id"
Spezifizieren Sie den Fremdschlüssel nicht selbst hier: ': foreign_key =>" origin_id "'? Wenn in der "Schritt" -Tabelle kein Fremdschlüssel vorhanden ist, nehme ich an, dass Sie in Ihrer "Routen" -Tabelle "step_id" haben. – Uzbekjon
Auf welcher Tabelle sind die 'origin_id' und' destination_id' definiert? Wenn es die "Routen" -Tabelle ist, dann haben Sie die Assoziationen in umgekehrter Richtung und Sie sollten 'gehört_to' anstelle von' has_one' verwenden. – BoraMa
zeigen Sie bitte Ihr Schema. – uday