[RUBY-ON-RAILS] 어떻게 레일 응용 프로그램에서 긴 ID를 사용 하는가?
RUBY-ON-RAILS어떻게 레일 응용 프로그램에서 긴 ID를 사용 하는가?
어떻게 액티브의 ID에 대한 (기본) 형식을 변경할 수 있습니까? INT 나는 오랫동안 선호, 긴 충분하지 않습니다. 하나는 그냥 소수를 사용합니까 - 마이 그 레이션에 대한 긴 : 나는 전혀 없다는 것을 놀랐다?
해결법
-
==============================
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.기본 기본 키 열 유형을 설정하려면 마이그레이션 파일은 엉망에 위치하지 않습니다.
기본 기본 키 열 유형을 설정하려면 마이그레이션 파일은 엉망에 위치하지 않습니다.
대신, 당신의 설정 / 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.이 레일 풋 때문에 자동으로 마이그레이션와 기본 키 설정하기 어렵다.
이 레일 풋 때문에 자동으로 마이그레이션와 기본 키 설정하기 어렵다.
이 같은 나중에 모든 열을 변경할 수 있습니다 :
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.레일 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.사람이이 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.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.MySQL은, 3 레일 :
MySQL은, 3 레일 :
t.column :foobar, :int, :limit => 8
나에게 BIGINT 만 int를 제공하지 않습니다. 하나,
t.column :twitter_id, 'bigint'
잘 작동합니다. (가 없지만 MySQL로 나를 묶어.)
-
==============================
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.나는 당신이 당신의 마이그레이션에 사용되는 데이터 유형을 변경할 수있는 보석이라고 액티브 - 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.당신은 이런 식으로 작업을 수행 할 수 있습니다 :
당신은 이런 식으로 작업을 수행 할 수 있습니다 :
class CreateUsers < ActiveRecord::Migration[5.0] def change create_table :users, id: :bigserial do |t| t.string :name end end end
-
==============================
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"
그렇지 않으면 당신은 데이터베이스 계층에 외부 키 제한을 추가 할 수 없습니다.
from https://stackoverflow.com/questions/1066340/how-to-use-long-id-in-rails-applications by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 루비에서 객체 속성에 의해 UNIQ (0) | 2020.02.23 |
---|---|
[RUBY-ON-RAILS] 어떻게 카피 바라의 체크 박스를 확인? (0) | 2020.02.23 |
[RUBY-ON-RAILS] 유증 사용자 정의 경로 및 로그인 페이지 (0) | 2020.02.23 |
[RUBY-ON-RAILS] 자원과 자원 방법의 차이 (0) | 2020.02.23 |
[RUBY-ON-RAILS] 어떻게 레일에 collection_select에 대한 HTML 옵션을 설정합니까? (0) | 2020.02.23 |