2017-11-29 6 views
3

원래 PostgreSQL을 사용하여 레일 5 애플리케이션을 개발했습니다. 호스팅과 관련된 몇 가지 문제로 인해 모든 개발 작업을 마친 후 MariaDB로 변경해야했습니다.레일 5 마이그레이션 데이터 형식 문제

장바구니에서 관리자에 대한 참조를 추가하는 업데이트를 적용하려고합니다. 내가

rake db:migrate 

나는이 오류가 실행할 때

class AddAdminRefToCart < ActiveRecord::Migration[5.1] 
    def change 
    add_reference :carts, :admin, foreign_key: true 
    end 
end 

: 여기 내 마이그레이션입니다

== 20171129152942 AddAdminRefToCart: migrating ================================ 
-- add_reference(:carts, :admin, {:foreign_key=>true}) 
rake aborted! 
StandardError: An error has occurred, all later migrations canceled: 

Column `admin_id` on table `carts` has a type of `bigint(20)`. 
This does not match column `id` on `admins`, which has type `int(11)`. 
To resolve this issue, change the type of the `admin_id` column on `carts` to be :integer. (For example `t.integer admin_id`). 

오류는 의미가 있지만 문제를 해결하는 적절한 방법이 확실하지 오전 . 누군가 내 마이그레이션을 어떻게 작성해야하는지에 대한 지침을 제공 할 수 있습니까? 미리 감사드립니다!

답변

3

add_reference 대신 정확한 데이터 형식을 지정할 수 있습니다. (지금 분명히 기본값) limit: 8에 반대

add_column :carts, :admin_id, :integer, limit: 4 
add_foreign_key :carts, :admins 

limit: 4 매개 변수는 BIGINT에 해당하는 것이다, INT에 해당 할 4 바이트 필드를 만들 데이터베이스를 말하고있다. 내가 코멘트에서 언급 한 바와 같이 add_reference가 선택적으로 add_indexadd_foreign_keyadd_column 단지 "문법 설탕"이고 이후

,이, add_reference를 사용하지 않음으로써 문제를 만들지 않습니다.

+0

레일스에 문제가 있습니까? 관계에서 add_reference를 사용하지 않기 때문에 레일 기능이 작동하지 않을 것으로 예상됩니까? –

+0

전혀 아닙니다. 'add_reference'는'add_column'과 선택적으로'add_index'와'add_foreign_key'를위한 문법적 설탕입니다. – jeffdill2