2017-08-25 3 views
0

konnte ich keinen Eintrag in der Datenbank erstellen Ich habe zwei Modelle - CallDetail und Agent. Die Agents-Tabelle verwendet den Fremdschlüssel aus der Tabelle Call_Details.Mit create function vom Controller

Das Schema wird unten eingefügt.

ActiveRecord::Schema.define(version: 20170824171227) do 

    create_table "agents", force: :cascade do |t| 
    t.integer "agent_id" 
    t.string "name" 
    t.integer "CallDetail_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.index ["CallDetail_id"], name: "index_agents_on_CallDetail_id" 
    end 

    create_table "call_details", force: :cascade do |t| 
    t.integer "call_id" 
    t.string "word" 
    t.float "start_time" 
    t.float "end_time" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

end 

In dem obigen Datenbankschema erstellt Attribute CallDetail ID und Mittel zusätzlich zu den Attributen Schienen standardmäßig angezeigt ID.

Meine Agenten Controller erstellen sieht Funktion wie die folgende

def create 
    @agent = Agent.new(agent_params) 

    respond_to do |format| 
     if @agent.save 
     format.html { redirect_to @agent, notice: 'Agent was successfully created.' } 
     format.json { render :show, status: :created, location: @agent } 
     else 
     format.html { render :new } 
     format.json { render json: @agent.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Meine Modelle unter

class CallDetail < ApplicationRecord 
end 
class Agent < ApplicationRecord 
    belongs_to :CallDetail 
end 

gegeben sind, wenn ich öffnen localhost: 3000/Agenten und versuchen, einen neuen Eintrag in der Datenbank zu erstellen Der folgende Fehler wird angezeigt.

SQLite3 :: SQLException: keine solche Tabelle: main.CallDetails: INSERT INTO "agents" ("agent_id", "name", "CallDetail_id", "created_at", "updated_at") VALUES (?,?,?) ,?,?)

enter image description here

ich bin neu auf Schienen. Was mache ich hier falsch? Bitte helfen Sie.

+0

Ist Ihre App mit der Datenbank verbunden und haben Sie diese Tabellen? überprüfen Sie es von "Rails-Konsole", geben Sie dann "ActiveRecord :: Base.connection.tables" – sa77

+0

ja es scheint verbunden zu sein, die Ausgabe in der Konsole liest => ["schema_migrations", "ar_internal_metadata", "call_details", " agents "] @ sa77 – AndEnthu

+0

Wie hast du die Assoziation zwischen Agenten und Call_details erstellt? – hashrocket

Antwort

0

Rails verwendet Flexionen, um unter anderem die Namen von Modellen zu ändern. Sie verweisen CallDetail fälschlicherweise. Wenn Sie CallDetail referenzieren, sollten Sie snake_case, nicht CamelCase verwenden. Sie rufen CallDetail an, wo Sie call_detail anrufen sollen.

Beachten Sie in Ihrer Schemadatei, dass CallDetail in Call_Details konvertiert wurde. Dies ist eine der Möglichkeiten, wie Rails Flexionen verwendet. Sie können über Flexionen here lesen.

+0

ja mit snake_case funktioniert. Rails ist super empfindlich mit Konventionen. Ich frage mich nur, warum es mir erlaubt hat, eine falsche Referenz zu erstellen. Jedenfalls vielen Dank @hashrocket. – AndEnthu

Verwandte Themen