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!
Ich denke, es wird durch den Tippfehler in Ihrer 'show.html.erb' verursacht, wo Sie' @ question_list' anstelle von '@ question_lists' verwendet haben. –
Danke, aber nach der Korrektur des Tippfehlers ist die Fehlermeldung immer noch das Gleiche. – timbartels
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. –