:email
열 이 필요한 사용자 모델이 있습니다 (초기 스캐 폴드 중에 해당 열을 추가하는 것을 잊었습니다).
나는 마이그레이션 파일을 열어 추가 t.string :email
, 한 rake db:migrate
, 그리고있어 NoMethodError
. 그런 다음 줄을 추가했습니다
add_column :users, :email, :string
또 rake db:migrate
다시 NoMethodError
. 여기 단계가 빠졌습니까?
편집 : 다음은 마이그레이션 파일입니다.
class CreateUsers < ActiveRecord::Migration
def self.up
add_column :users, :email, :string
create_table :users do |t|
t.string :username
t.string :email
t.string :crypted_password
t.string :password_salt
t.string :persistence_token
t.timestamps
end
end
def self.down
drop_table :users
end
end
답변
원래 마이그레이션을 이미 실행 한 경우 (편집하기 전에) 새 마이그레이션을 생성 rails generate migration add_email_to_users email:string
해야합니다 (트릭을 수행함). 행을 포함하는 마이그레이션 파일을 만듭니다.
add_column :users, email, string
그런 다음 a rake db:migrate
를 수행하고 새 마이그레이션을 실행하여 새 열을 만듭니다.
원래 마이그레이션을 아직 실행하지 않은 경우 편집하려는 것처럼 편집 할 수 있습니다. 마이그레이션 코드는 거의 완벽합니다. add_column
행을 완전히 제거하면 됩니다 (테이블이 작성되기 전에 테이블에 열을 추가하려고 시도하고 테이블 작성 코드가 이미 포함되어 있습니다 t.string :email
).
답변
레일 콘솔에서이 명령을 사용하십시오
rails generate migration add_fieldname_to_tablename fieldname:string
과
rake db:migrate
이 마이그레이션을 실행하려면
답변
때때로 rails generate migration add_email_to_users email:string
이와 같은 마이그레이션을 생성합니다
class AddEmailToUsers < ActiveRecord::Migration[5.0]
def change
end
end
이 경우 당신은 수동으로해야 add_column
에 change
:
class AddEmailToUsers < ActiveRecord::Migration[5.0]
def change
add_column :users, :email, :string
end
end
그런 다음 실행 rake db:migrate
답변
당신은 또한 할 수 있습니다
rake db:rollback
테이블에 데이터를 추가하지 않은 경우 전자 메일 열을 추가하여 마이그레이션 파일을 편집 한 다음
rake db:migrate
시스템에 rails 3.1 이상이 설치되어있는 경우 작동합니다.
가장 간단한 방법은 변경으로 마이그레이션 파일의 변경을 그대로 허용하는 것입니다. 사용하다
$rake db:migrate:redo
마지막 마이그레이션을 롤백하고 다시 마이그레이션합니다.
답변
열을 추가하려면 다음 단계를 수행해야했습니다.
-
rails generate migration add_fieldname_to_tablename fieldname:string
대안
rails generate migration addFieldnameToTablename
마이그레이션이 생성되면 마이그레이션을 편집하고 해당 열에 추가하려는 모든 속성을 정의하십시오.
참고 : Rails의 테이블 이름은 항상 복수형입니다 (DB 규칙과 일치). 앞에서 언급 한 단계 중 하나를 사용하는 예
rails generate migration addEmailToUsers
-
rake db:migrate
또는
db/schema.rb
SQL 쿼리에서 원하는 열 추가 에서에서 스키마를 변경할 수 있습니다 .-
이 명령을 실행하십시오 :
rake db:schema:load
경고 /주의
실행하면
rake db:schema:load
테이블의 모든 데이터가 자동으로 지워집니다.
답변
이 작업을 수행하면 원래 마이그레이션을 처리하지 않고 위쪽 섹션의 추가 열과 아래쪽 섹션의 드롭 열만 사용하여 새 마이그레이션을 만듭니다.
원본을 변경 한 후 다시 마이그레이션하면 다시 실행할 수 있지만이 경우에는 제대로 작동하지 않는 마이그레이션이 만들어진 것 같습니다.
현재 게시 된 것처럼 열을 추가 한 다음 테이블을 만듭니다.
순서를 변경하면 작동 할 수 있습니다. 또는 기존 마이그레이션을 수정하면서 별도의 추가 열을 수행하는 대신 작성 테이블에 추가하십시오.
답변
force: true
테이블이 이미있는 경우을 사용하여 테이블의 테이블 열을 강제로 실행할 수도 있습니다.
예 :
ActiveRecord::Schema.define(version: 20080906171750) do
create_table "authors", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
end
