0

の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 
+0

あなたはDEVとテスト環境で同じデータベースを使用していますか? 'RAILS_ENV = test rake db:migrate'を試してください。database.ymlを表示してください – Thanh

+0

2つの環境を意識的に切り替えることは覚えていません。 database.ymlはどこで見つけることができますか? – Tito

+0

心配しないで、私はそれを見つけました。 – Tito

答えて

0

試してみてください。

RAILS_ENV=test bundle exec rake db:schema:load 
+0

私はそれを試した後、rake db:migrateを試してみましたが、同じエラーが発生しました。 – Tito

+0

エラーとは何ですか?ここで印刷してください。 – Hummusawy

関連する問題