2016-03-21 12 views
1

Ich habe eine Rails-Anwendung und wenn ich meinen Test ausgeführt habe ich diese Fehlermeldung bekommen:ActionView :: Template :: Fehler: SQLite3 :: SQLException keine solche Spalte "question_list_id" =?

Error: QuestionListsControllerTest#test_should_show_question_list: ActionView::Template::Error: 
SQLite3::SQLException: no such column: questions.question_list_id: SELECT "questions".* FROM "questions" WHERE "questions"."question_list_id" = ? 
    app/views/question_lists/show.html.erb:8:in `_app_views_question_lists_show_html_erb__3832013936113844388_70290298491920' 
    test/controllers/question_lists_controller_test.rb:28:in `block in <class:QuestionListsControllerTest>' 

Dies ist mein Controller:

class QuestionListsController < ApplicationController 
before_action :set_question_list, only: [:show, :edit, :update, :destroy] 

    def index 
    @question_lists = QuestionList.all 
    end 

    def show 
    @questions = @question_list.questions 
    end 

    private 
    def set_question_list 
    @question_list = QuestionList.find(params[:id]) 
    end 

    def question_list_params 
    params.require(:question_list).permit(:title) 
    end 
end 

Dies ist mein Test-Datei:

require 'test_helper' 

class QuestionListsControllerTest < ActionController::TestCase 
    setup do 
    @question_list = question_lists(:one) 
    end 

    test 'should get index' do 
    get :index 
    assert_response :success 
    assert_not_nil assigns(:question_lists) 
    end 
test 'should show question_list' do 
    get :show, id: @question_list 
    assert_response :success 
    end 
end 

Und das ist mein show.html.erb

<p id="notice"><%= notice %></p> 

<p> 
    <h1>Question List: <%= @question_list.title %></h1> 
</p> 

<h2>Questions</h2> 
<% @questions.each do |question| %> 
    <p> 
    <strong>Question:</strong> 
    <%= question.title %> 
    </p> 
<% end %> 

<h2>Create a question</h2> 
<%= form_for([@question_list, @questions.build]) do |f| %> 
    <p> 
    <%= f.label :title, "Question:" %> 
    <%= f.text_field :title %> 
    </p> 
    <p> 
    <%= f.submit "Create Question"%> 
    </p> 
<% end %> 
<%= link_to 'Edit', edit_question_list_path(@question_list) %> | 
<%= link_to 'Back', question_lists_path %> 

und die Modelle en Schema

class QuestionList < ActiveRecord::Base 
    has_many :questions 
end 

class Question < ActiveRecord::Base 
    belongs_to :question_list 
end 

schema.rb

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

    create_table "question_lists", force: :cascade do |t| 
    t.string "title" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    create_table "questions", force: :cascade do |t| 
    t.string "title" 
    t.integer "question_list_id" 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    end 

end 

Vielen Dank im Voraus!

+0

Ich denke, es wird durch den Tippfehler in Ihrer 'show.html.erb' verursacht, wo Sie' @ question_list' anstelle von '@ question_lists' verwendet haben. –

+0

Danke, aber nach der Korrektur des Tippfehlers ist die Fehlermeldung immer noch das Gleiche. – timbartels

+0

Auch ich denke, der Fehler ist mit der '@questions = @ question_lists.questions' in der' show' Methode Ihres Controllers. Versuchen Sie zu sehen, welche "params" Sie als "id" erhalten, indem Sie die 'params' wie' puts params' in die 'show' Methode schreiben. –

Antwort

2

Das Testdatenbankschema ist nicht synchron.

Erzwingen Sie eine Resynchronisation mit rake db:test:prepare.