Rails has_and_belongs_to_many 마이그레이션
두 가지 모델이 restaurant
있으며 user
has_and_belongs_to_many 관계를 수행하고 싶습니다.
이미 모델 파일로 사라지고 추가 한 has_and_belongs_to_many :restaurants
과has_and_belongs_to_many :users
이 시점에서 Rails 3과 같은 작업을 수행 할 수 있어야한다고 가정합니다.
rails generate migration ....
그러나 내가 시도한 모든 것이 실패한 것 같습니다. 나는 이것이 레일에 익숙하지 않은 정말 간단한 것이므로 여전히 배우고 있습니다.
알파벳 순서 로 restaurant_id
및 user_id
기본 키가없는 별도의 조인 테이블을 추가해야합니다 .
먼저 마이그레이션을 실행 한 다음 생성 된 마이그레이션 파일을 편집하십시오.
레일 3
rails g migration create_restaurants_users_table
레일 4 :
rails g migration create_restaurants_users
레일 5
rails g migration CreateJoinTableRestaurantUser restaurants users
로부터 문서 :
JoinTable이 이름의 일부인 경우 조인 테이블을 생성하는 생성기도 있습니다.
마이그레이션 파일 ( :id => false
; 기본 키 생성을 방해하는 요소입니다) :
레일 3
class CreateRestaurantsUsers < ActiveRecord::Migration
def self.up
create_table :restaurants_users, :id => false do |t|
t.references :restaurant
t.references :user
end
add_index :restaurants_users, [:restaurant_id, :user_id]
add_index :restaurants_users, :user_id
end
def self.down
drop_table :restaurants_users
end
end
레일 4
class CreateRestaurantsUsers < ActiveRecord::Migration
def change
create_table :restaurants_users, id: false do |t|
t.belongs_to :restaurant
t.belongs_to :user
end
end
end
t.belongs_to
필요한 인덱스를 자동으로 생성합니다. def change
정방향 또는 롤백 마이그레이션을 자동으로 감지하므로 업 / 다운이 필요 없습니다.
레일 5
create_join_table :restaurants, :users do |t|
t.index [:restaurant_id, :user_id]
end
참고 : create_join_table에 매개 변수로 전달할 수있는 사용자 정의 테이블 이름 옵션도 있습니다 table_name
. 로부터 문서
기본적으로, 조인 테이블의 이름은 알파벳 순서로 create_join_table에 제공된 처음 두 인수의 합집합에서 나옵니다. 테이블 이름을 사용자 정의하려면 : table_name 옵션을 제공하십시오.
여기에 대한 답변은 아주 오래되었습니다. Rails 4.0.2부터는 마이그레이션에서을 사용 create_join_table
합니다.
마이그레이션을 작성하려면 다음을 실행하십시오.
rails g migration CreateJoinTableRestaurantsUsers restaurant user
이것은 다음을 생성합니다 :
class CreateJoinTableRestaurantsUsers < ActiveRecord::Migration
def change
create_join_table :restaurants, :users do |t|
# t.index [:restaurant_id, :user_id]
# t.index [:user_id, :restaurant_id]
end
end
end
If you want to index these columns, uncomment the respective lines and you're good to go!
When creating the join table, pay careful attention to the requirement that the two tables need to be listed in alphabetical order in the migration name/class. This can easily bite you if your model names are similar, e.g. "abc" and "abb". If you were to run
rails g migration create_abc_abb_table
Your relations will not work as expected. You must use
rails g migration create_abb_abc_table
instead.
For HABTM relationships, you need to create a join table. There is only join table and that table should not have an id column. Try this migration.
def self.up
create_table :restaurants_users, :id => false do |t|
t.integer :restaurant_id
t.integer :user_id
end
end
def self.down
drop_table :restaurants_users
end
You must check this relationship rails guide tutorials
참고URL : https://stackoverflow.com/questions/6561330/rails-has-and-belongs-to-many-migration
'development' 카테고리의 다른 글
포인터 선언; (0) | 2020.07.25 |
---|---|
OCaml의 int가 왜 31 비트입니까? (0) | 2020.07.25 |
WebAPI 삭제가 작동하지 않습니다-405 메소드가 허용되지 않습니다 (0) | 2020.07.25 |
리사이클 러 뷰 어댑터에서 컨텍스트를 얻는 방법 (0) | 2020.07.25 |
루비에서 버전을 비교하는 방법? (0) | 2020.07.25 |