2016-03-30 15 views
0

既存のモデルを持つテーブルの新しい足場を生成した後にエラーが発生しています:NOT NULL constraint failed: questions.question_text足場を生成した後に 'NOT NULL制約に失敗しました'

これはbeen covered beforeですが、以下で行ったように、null値が設定されている場合の回答はありませんでした。

まず、私はすでにのように見えた、Questionsと題したこのテーブルのモデル/移行を生成していた:

..._私は指定していますことをここcreate_questions.rb

class CreateQuestions < ActiveRecord::Migration 
    def change 
    create_table :questions do |t| 
    t.belongs_to :category, index: true 
    t.string :question_text, :null => false 

    t.timestamps 
    end 
    end 
end 

お知らせnull => false

rails generate scaffold Questions --skip 

サーバーを再起動した後、私は上記のエラーに実行しています:いくつかの時間を節約するために、私は私が簡単にQuestionsにデータを入力できるようにするために足場のコマンドを実行しました。私がヌル値に直接対処しているので、block in QuestionsController#createに達したときにエラーが発生する理由がわかりません(言い換えれば、質問を作成しようとするとき)。

それが助け場合は、ここだけでなく、私のQuestion.rbモデルです:

class Question < ActiveRecord::Base 

    has_many :quiz_questions 
    has_many :quizzes, through: :quiz_questions 
    has_many :answers 
    belongs_to :category 
    accepts_nested_attributes_for :answers 

    end 

は私が間違って何をしているのですが?

+0

私はどのようにこの特定の足場工事を確認していないが、最も簡単な解決策は、この非NULLカラムのデフォルト値を指定することです: 't.string:QUESTION_TEXT、ヌル:falseの場合、デフォルト:「」' 。 – mudasobwa

答えて

1

あなたはあなたにもこのルールを強制したモデルの検証を追加したいと思うよりも、検証の形式としてヌルいない使用している場合:

class Question < ActiveRecord::Base 
    # ... 
    validates_presence_of :question_text 
end 

これは、データベースドライバレベルの例外を防ぎ、ユーザーからのフィードバックを提供します。

属性なしでスキャフォールドジェネレータを実行したので、パラメータホワイトリストが空である可能性があると推測しています。入力が実際にイニシャライザに渡されることはないため、上記の検証が失敗する可能性があります。

class QuestionsController < ApplicationController 

    def create 
    @question = Question.create(question_params) 
    # ... 
    end 

    private 

    def question_params 
     params.require(:question) 
      .permit(
       :category_id, 
       :question_text 
       answers_attributes: [:foo, :bar, :baz] 
      ) 
    end 
end 
関連する問題