2017-08-25 1 views
0

J'ai deux modèles: CallDetail et Agent. La table agents utilise la clé étrangère de la table call_details.Impossible de créer une entrée dans la base de données en utilisant la fonction de création à partir du contrôleur.

Le schéma est collé ci-dessous.

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 

Dans le schéma de base de données ci-dessus, en plus des attributs représentés rails par défaut crée des attributs CallDetail ID et ID de l'agent.

Mon contrôleur Agents créer la fonction ressemble à la

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 

Mes modèles suivants sont donnés ci-dessous

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

Quand j'ouvre localhost: 3000/agents et essayer de créer une nouvelle entrée dans la base de données l'erreur suivante est affichée.

SQLite3 :: SQLException: aucune table de ce type: main.CallDetails: INSERT INTO "agents" ("agent_id", "nom", "CallDetail_id", "created_at", "updated_at") VALEURS (?,?,? ,?,?)

enter image description here

Je suis nouveau sur les rails. Que fais-je incorrectement ici? S'il vous plaît aider.

+0

Votre application est-elle connectée à la base de données et possède-t-elle ces tables? vérifier à partir de 'rails console', puis entrez' ActiveRecord :: Base.connection.tables' – sa77

+0

oui il semble être connecté, la sortie dans la console lit => ["schema_migrations", "ar_internal_metadata", "call_details", " agents "] @ sa77 – AndEnthu

+0

Comment avez-vous créé l'association entre agents et call_details? – hashrocket

Répondre

0

Rails utilise des inflexions pour modifier le nom des modèles (entre autres). Vous référencez incorrectement CallDetail. Lorsque vous référencez CallDetail, vous devez utiliser snake_case, pas CamelCase. Vous appelez CallDetail où vous devriez appeler call_detail.

Notez dans votre fichier de schéma que CallDetail a été converti en call_details. C'est l'une des façons dont Rails utilise les inflexions. Vous pouvez lire sur les inflexions here.

+0

yes utilisant snake_case fonctionne. les rails sont super sensibles avec les conventions. Je me demande simplement pourquoi cela m'a permis de créer une mauvaise référence pour commencer. de toute façon merci beaucoup @hashrocket. – AndEnthu