복붙노트

[RUBY-ON-RAILS] 어떻게 레일 응용 프로그램에서 긴 ID를 사용 하는가?

RUBY-ON-RAILS

어떻게 레일 응용 프로그램에서 긴 ID를 사용 하는가?

어떻게 액티브의 ID에 대한 (기본) 형식을 변경할 수 있습니까? INT 나는 오랫동안 선호, 긴 충분하지 않습니다. 하나는 그냥 소수를 사용합니까 - 마이 그 레이션에 대한 긴 : 나는 전혀 없다는 것을 놀랐다?

해결법

  1. ==============================

    1.http://moeffju.net/blog/using-bigint-columns-in-rails-migrations에 크레딧

    http://moeffju.net/blog/using-bigint-columns-in-rails-migrations에 크레딧

    class CreateDemo < ActiveRecord::Migration
      def self.up
        create_table :demo, :id => false do |t|
          t.integer :id, :limit => 8
        end
      end
    end
    
  2. ==============================

    2.기본 기본 키 열 유형을 설정하려면 마이그레이션 파일은 엉망에 위치하지 않습니다.

    기본 기본 키 열 유형을 설정하려면 마이그레이션 파일은 엉망에 위치하지 않습니다.

    대신, 당신의 설정 / environment.rb에 하단에이 스틱

    ActiveRecord::ConnectionAdapters::MysqlAdapter::NATIVE_DATABASE_TYPES[:primary_key] = "BIGINT UNSIGNED DEFAULT NULL auto_increment PRIMARY KEY"
    

    그리고 모든 테이블은 ID의 의도 열 형식으로 작성되어야한다 :

    +--------------+---------------------+------+-----+---------+----------------+
    | Field        | Type                | Null | Key | Default | Extra          |
    +--------------+---------------------+------+-----+---------+----------------+
    | id           | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment | 
    

    당신은 당신이 착수 한 것을 수행 한 후 ... 다음 질문은 "어떻게 내가 내 외래 키 열이 동일한 열 유형을해야합니까?"아마 이 의미는 BIGINT로 기본 키의 people.id을 가지고하지 않기 때문에 (20)는 부호없는 및 INT (11) 또는 다른 작업을 할 수 person_id로?

    그 컬럼의 경우, 예를 들어, 다른 제안을 참조 할 수 있습니다

    t.column :author_id, 'BIGINT UNSIGNED'
    t.integer :author_id, :limit => 8
    

    UPDATE : @Notinlist는, 임의의 테이블에 기본 키에 대한 임의의 열을 사용하는 방법이 CREATE_TABLE-change_column 춤을 수행해야합니다

    create_table(:users) do |t|
      # column definitions here..
    end
    change_column :users, :id, :float # or some other column type
    

    예를 들면 내가 대신 자동 증가 정수의 GUID를 원한다면,

    create_table(:users, :primary_key => 'guid') do |t|
      # column definitions here..
    end
    change_column :users, :guid, :string, :limit => 36
    
  3. ==============================

    3.이 레일 풋 때문에 자동으로 마이그레이션와 기본 키 설정하기 어렵다.

    이 레일 풋 때문에 자동으로 마이그레이션와 기본 키 설정하기 어렵다.

    이 같은 나중에 모든 열을 변경할 수 있습니다 :

    change_column : 푸바 : something_id, 'BIGINT'

    이 같은 초기 마이그레이션에서 사용자 정의 유형과 같은 기본이 아닌 ID를 지정할 수 있습니다 :

    create_table :tweets do |t|
      t.column :twitter_id, 'bigint'
      t.column :twitter_in_reply_to_status_id, 'bigint'
    end
    

    내가 "BIGINT"가 어디 데이터베이스가 사용할 데이터베이스 열 유형에 사용할 것이라고 텍스트를 넣을 수 있습니다 (예를 들어, "긴 부호없는").

    당신이 BIGINT로 당신의 id 컬럼이 필요한 경우, 가장 쉬운 방법은 다음 테이블을 만들 change_column와 같은 마이그레이션에 열을 변경하는 것입니다 할 수 있습니다.

    마이그레이션이 실패 할 경우이 이상한 상태에서 데이터베이스를 떠나지 않도록 PostgreSQL을하고 SQLite는 함께, 스키마 변경은 원자이다. MySQL을 사용하면 더 조심해야합니다.

  4. ==============================

    4.레일 API 문서에 따르면, 유형에 대한 가능한 옵션은 다음과 같습니다

    레일 API 문서에 따르면, 유형에 대한 가능한 옵션은 다음과 같습니다

    :string
    :text
    :integer
    :float
    :decimal
    :datetime
    :timestamp
    :time
    :date
    :binary
    :boolean
    

    소수를, 또는 당신은 당신이 필요 직접하는 경우 명령을 실행할 수 있습니다 : 당신은 사용할 수 있습니다 :

    class MyMigration
      def self.up
        execute "ALTER TABLE my_table ADD id LONG"
      end
    end
    

    당신이 열이 원하는 방법 대형 액티브에게 제한 : wappos가 지적한 것처럼, 당신은 같은 보조 옵션을 사용할 수 있습니다. 제한 :보다 큰 용량 INT 열 : 그래서 당신은을 사용합니다.

  5. ==============================

    5.사람이이 PostgreSQL을 함께 작동해야하는 경우,이 같은 초기화를 만듭니다

    사람이이 PostgreSQL을 함께 작동해야하는 경우,이 같은 초기화를 만듭니다

    # config/initializers/bigint_primary_keys.rb
    ActiveRecord::Base.establish_connection
    ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:primary_key] = 'bigserial primary key'
    

    데이터베이스 연결을 설정할 때까지 있기 때문에 레일 3.2 (그리고 어쩌면 이전 버전)에서 게으른로드, 액티브 :: ConnectionAdapters는 :: PostgreSQLAdapter이 필요하지 않습니다.

  6. ==============================

    6.rails4, 당신은 그것을 할 수 있습니다.

    rails4, 당신은 그것을 할 수 있습니다.

    rails4 & 포스트 그레스의 더미 모델을 만들 수있는 예는 다음,

    xxx_migrate_dummies.rb :

    class CreateDummies < ActiveRecord::Migration
      def change
        create_table :dummies, :id => false do |t|
          t.column :id, :serial8, primary_key: true
          t.string :name, :limit => 50, null: false
          t.integer :size, null: false
    
          t.column :create_date, :timestamptz, null: false
        end
      end
    end
    

    이 무슨 짓을했는지 :

  7. ==============================

    7.MySQL은, 3 레일 :

    MySQL은, 3 레일 :

    t.column :foobar, :int, :limit => 8
    

    나에게 BIGINT 만 int를 제공하지 않습니다. 하나,

    t.column :twitter_id, 'bigint'
    

    잘 작동합니다. (가 없지만 MySQL로 나를 묶어.)

  8. ==============================

    8.최근에 나를 위해 일한 것을 조정 다른 솔루션에서 대출.

    최근에 나를 위해 일한 것을 조정 다른 솔루션에서 대출.

    설정 / 초기화에있는 파일에 추가합니다. 그것은 (chookeat의 제안에서 적응) 새 열 유형을 선언합니다.

    액티브 :: ConnectionAdapters :: Mysql2Adapter :: NATIVE_DATABASE_TYPES [: long_primary_key] = "BIGINT (20) 초기에 NULL AUTO_INCREMENT PRIMARY KEY"

    긴 ID를 사용 마이그레이션과 같은 수 있습니다 :

        create_table :notification_logs, :id => false do |t|
    
          t.column :id, :long_primary_key
          # ...
        end
    
  9. ==============================

    9.나는 당신이 당신의 마이그레이션에 사용되는 데이터 유형을 변경할 수있는 보석이라고 액티브 - native_db_types_override을 썼다.

    나는 당신이 당신의 마이그레이션에 사용되는 데이터 유형을 변경할 수있는 보석이라고 액티브 - native_db_types_override을 썼다.

    당신의 Gemfile에 추가 :

    gem 'activerecord-native_db_types_override'
    

    다음의 설정 / environment.rb에, 추가, 포스트 그레스 긴 ID를 사용합니다 :

    NativeDbTypesOverride.configure({
      postgres: {
        primary_key: { name: "bigserial primary key"}
      }
    })
    

    최신 정보는 README를 참조하십시오.

  10. ==============================

    10.당신은 이런 식으로 작업을 수행 할 수 있습니다 :

    당신은 이런 식으로 작업을 수행 할 수 있습니다 :

    class CreateUsers < ActiveRecord::Migration[5.0]
      def change
        create_table :users, id: :bigserial do |t|
          t.string :name
        end
      end
    end
    
  11. ==============================

    11.기본 기본 키 열 유형을 변경하는 방법에 대한 수정 :

    기본 기본 키 열 유형을 변경하는 방법에 대한 수정 :

    대신에:

    ActiveRecord::ConnectionAdapters::MysqlAdapter::NATIVE_DATABASE_TYPES[:primary_key] = "BIGINT UNSIGNED DEFAULT NULL auto_increment PRIMARY KEY"
    

    당신은해야한다 :

    ActiveRecord::ConnectionAdapters::MysqlAdapter::NATIVE_DATABASE_TYPES[:primary_key] = "BIGINT(8) UNSIGNED DEFAULT NULL auto_increment PRIMARY KEY"
    

    그렇지 않으면 당신은 데이터베이스 계층에 외부 키 제한을 추가 할 수 없습니다.

  12. from https://stackoverflow.com/questions/1066340/how-to-use-long-id-in-rails-applications by cc-by-sa and MIT license