programing

테이블이 레일에 있는지 확인합니다.

magicmemo 2023. 5. 31. 15:48
반응형

테이블이 레일에 있는지 확인합니다.

테이블이 없으면 작동하지 않는 갈퀴 작업이 있습니다.저는 웹사이트에서 20명 이상의 엔지니어들과 함께 작업하고 있기 때문에 그들이 해당 테이블을 채울 레이크 작업을 하기 전에 테이블을 마이그레이션했는지 확인하고 싶습니다.

AR에는 다음과 같은 방법이 있습니까?Table.exists테이블을 성공적으로 마이그레이션했는지 확인하려면 어떻게 해야 합니까?

Rails 5에서 API는 테이블/뷰, 집합적으로 데이터 소스와 관련하여 명시적이 되었습니다.

# Tables and views
ActiveRecord::Base.connection.data_sources
ActiveRecord::Base.connection.data_source_exists? 'kittens'

# Tables
ActiveRecord::Base.connection.tables
ActiveRecord::Base.connection.table_exists? 'kittens'

# Views
ActiveRecord::Base.connection.views
ActiveRecord::Base.connection.view_exists? 'kittens'

레일 2, 3 및 4에서 API는 테이블에 대한 것입니다.

# Listing of all tables and views
ActiveRecord::Base.connection.tables

# Checks for existence of kittens table/view (Kitten model)
ActiveRecord::Base.connection.table_exists? 'kittens'

마이그레이션 상태 가져오기:

# Tells you all migrations run
ActiveRecord::Migrator.get_all_versions

# Tells you the current schema version
ActiveRecord::Migrator.current_version

마이그레이션 또는 메타데이터에 더 많은 API가 필요한 경우 다음을 참조하십시오.

테이블이 존재하지 않는 경우에도:

모범을 보이다Kitten예상표kittens레일 3:

고양이 테이블이 존재합니까?#=> 거짓

마이그레이션을 통해 테이블을 제거하는 동안 이 정보를 발견했습니다.

drop_table :kittens if (table_exists? :kittens)
ActiveRecord::Migration.drop_table :kittens if (ActiveRecord::Base.connection.table_exists? :kittens)

Rails 3.2에 대한 작업

레일 5에서는 다음과 같은 간단한 형태를 사용할 수 있습니다.

drop_table :kittens, if_exists: true

참조: https://github.com/rails/rails/pull/16366

Rails 5 Active Record의 CHANGELOG는 다음과 같습니다.

drop_table의 :if_exists 옵션을 소개합니다.

예:

drop_table(:posts, if_exists: true)

그러면 다음을 수행할 수 있습니다.

DROP TABLE IF EXISTS posts

테이블이 존재하지 않는 경우 if_exists: false(기본값)는 예외를 발생시키는 반면 if_exists: true는 아무것도 수행하지 않습니다.

레일 5.1

if ActiveRecord::Base.connection.data_source_exists? 'table_name'
   drop_table :table_name
end

또는

drop_table :table_name, if_exists: true

이를 위한 올바른 방법은 Model.table_exists입니까?

class Dog < ApplicationRecord
  # something
end

do_something if Dog.table_exists?

언급URL : https://stackoverflow.com/questions/6590107/check-if-a-table-exists-in-rails

반응형