Programming

레일에서 테이블 이름 바꾸기

procodes 2020. 6. 8. 21:48
반응형

레일에서 테이블 이름 바꾸기


테이블 이름을 바꾸고 싶습니다 ... (모든 테이블)

이 코드 줄을 사용해 보았습니다.

ActiveRecord::ConnectionAdapters::SchemaStatements.rename_table(old_name, new_name)

이상한 것이 있습니다. 처음으로 작동한다는 것을 알고 있지만 이제 다음과 같은 오류가 발생합니다. ActiveRecord :: ConnectionAdapters :: SchemaStatements : Module에 대한 정의되지 않은 메소드`rename_table '

설정해야 할 것이 있습니까?


일반적으로 마이그레이션에서 다음과 같은 작업을 수행합니다.

class RenameFoo < ActiveRecord::Migration
  def self.up
    rename_table :foo, :bar
  end

  def self.down
    rename_table :bar, :foo
  end
end

Rails> = 3.1에서는이 change방법을 사용할 수 있습니다 .

 class RenameOldTableToNewTable < ActiveRecord::Migration
   def change
     rename_table :old_table_name, :new_table_name
   end 
 end

.rename_table클래스 메소드가 아닌 인스턴스 메소드이므로 호출 Class.method이 작동하지 않습니다. 대신 클래스의 인스턴스를 작성하고 인스턴스에서 다음과 같이 메소드를 호출해야합니다 Class.new.method.

[편집]이 경우 ActiveRecord::ConnectionAdapters::SchemaStatements클래스도 아닙니다 (캠에서 지적한 바와 같이). 위에서 말한대로 인스턴스를 만들 수도 없습니다. 그리고의 cam 예제를 사용해도 예외가 발생 class Foo; include ActiveRecord::ConnectionAdapters::SchemaStatements; def bar; rename_table; end; end;해도 작동하지 않습니다 rename_table.

반면에, ActiveRecord::ConnectionAdapters::MysqlAdapter 이다 클래스, 그것은 가능성이 당신이 (당신이 사용중인 데이터베이스에 따라, 또는 SQLite는 또는 PostgreSQL의) 테이블의 이름을 변경하는 데 사용해야 할 것이 클래스입니다. 이제는을 ActiveRecord::ConnectionAdapters::MysqlAdapter통해 이미 액세스 할 수 Model.connection있으므로 Model.connection.rename_table애플리케이션의 모든 모델을 사용하여 완전히 수행 할 수 있어야 합니다. [/편집하다]

그러나 테이블 이름을 영구적으로 바꾸려면 마이그레이션을 사용하여 테이블을 사용하는 것이 좋습니다. Rails를 사용하면 데이터베이스 구조를 쉽고 편리하게 조작 할 수 있습니다. 방법은 다음과 같습니다.

# Commandline
rails generate migration rename_my_table

# In db/migrate/[timestamp]_rename_my_table.rb:
class RenameMyTable < ActiveRecord::Migration
  def self.up
    rename_table :my_table, :my_new_table
  end

  def self.down
    rename_table :my_new_table, :my_table
  end
end

그런 다음, 당신은 당신과 함께 마이그레이션을 실행할 수 있습니다 rake db:migrate(부르는 self.up방법), 사용 rake db:rollback(호출 self.down마이그레이션을 실행 취소).


ActiveRecord::Migration.rename_table(:old_table_name, :new_table_name)

참고 URL : https://stackoverflow.com/questions/4631630/renaming-table-in-rails

반응형