のmy clientsテーブルにはemailという名前のカラムがあります。しかし、私がクライアントコントローラとモデルのテストを行ったとき、クライアントテーブルにemailという名前の列がないというテストが続いていました。Ruby on railでは、カラムが存在しないと言っていますが、スキーマ
するSQLite3 ::のSQLException:テーブルクライアントは、電子メールという名前の列を持っていない:私は私が最初にするとき、その列を入れていなかったことを認めないものの、「クライアント」ON UNIQUE INDEX「index_clients_on_email」(「Eメール」)
をCREATE私はテーブルを作成しましたが、別の移行を介して追加しました。私はrake db:migrateを実行し、rake db:drop:all、rake db:を作成してからrake db:migrateを試してみました。
電子メール列もクライアントテーブルのインデックスとして追加されました。
これは私のスキーマです:
ActiveRecord::Schema.define(version: 20161230163248) do
create_table "clients", force: :cascade do |t|
t.string "name", null: false
t.text "email", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "clients", ["email"], name: "index_clients_on_email", unique: true
create_table "projects", force: :cascade do |t|
t.text "project_description", null: false
t.string "project_timescale"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "client_id"
end
add_index "projects", ["client_id"], name: "index_projects_on_client_id"
end
クライアントテーブルの最初の移行:クライアントテーブルのインデックスとして電子メールを追加する
class CreateClients < ActiveRecord::Migration
def change
create_table :clients do |t|
t.string :name, presence: true, null: false
t.timestamps null: false
end
end
end
移行:
class AddIndexToClient < ActiveRecord::Migration
def change
add_index:clients, :email, unique: true
end
end
移行してメールの列を追加してください:
class AddEmailToClient < ActiveRecord::Migration
def change
add_column :clients, :email, :text
end
end
次は私のdatabase.ymlのです:
# SQLite version 3.x
# gem install sqlite3
#
# Ensure the SQLite 3 gem is defined in your Gemfile
# gem 'sqlite3'
#
default: &default
adapter: sqlite3
pool: 5
timeout: 5000
development:
<<: *default
database: db/development.sqlite3
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
<<: *default
database: db/test.sqlite3
production:
<<: *default
database: db/production.sqlite3
あなたはDEVとテスト環境で同じデータベースを使用していますか? 'RAILS_ENV = test rake db:migrate'を試してください。database.ymlを表示してください – Thanh
2つの環境を意識的に切り替えることは覚えていません。 database.ymlはどこで見つけることができますか? – Tito
心配しないで、私はそれを見つけました。 – Tito