我有一個叫Issue
模式具有以下數據庫結構:導軌 - 節能與NOT NULL約束對象
class CreateIssues < ActiveRecord::Migration
def change
create_table :issues do |t|
t.string :path, null: false
t.string :filename, null: false
t.string :name, null: false
t.string :year
t.integer :number
t.timestamps null: false
end
end
end
在我的模型測試中,我用下面一行:
issue = Issue.create path: "test_path", filename: "test_filename", name: "test_name"
...保存時產生異常:
SQLite3::ConstraintException: NOT NULL constraint failed:
issues.path: INSERT INTO "issues" ("created_at", "updated_at") VALUES (?, ?)
根據我的理解,當調用create
或new/save
時,rails首先插入一個只帶有時間戳的條目。我期望插入包含所有我已經傳遞給create
方法的值。我錯過了創作過程中的一個步驟嗎?
編輯:
基本信息和步驟:
- 中使用sqlite3
- 使用Rails 4.2.1
- 使用RSpec的
- 生成使用
be rails generate model Issue
- 問題模型增加了
NULL
個約束後記手工 - 難道
be rake db:migrate
成功 - 盡了各種型號規格文件 代碼
嘗試過其他車型,我得到生成的SQL只包含時間戳。
編輯2: 這裏是我的問題型號:
class Issue < ActiveRecord::Base
has_one :pending_issue
has_one :watched_issue
has_many :unmatched_issues
validates :path, presence: true
validates :filename, presence: true
validates :name, presence: true
attr_accessor :path
attr_accessor :filename
attr_accessor :name
attr_accessor :year
attr_accessor :number
end
這裏有些腥味 - 從一個新的應用程序開始,這段代碼對我來說工作得很好。是否有更多的代碼可以分享?或者您沿着這條路走下去的其他步驟,以達到目前的狀態? –
@GavinMiller編輯儘可能詳細,因爲我可以給你 – Cubia
當我在遷移中犯了一個錯字,並且必須回滾並重新遷移時,我收到了類似的錯誤。由於某些原因,測試數據庫沒有收到更改。見下面的答案。 –