[RUBY-ON-RAILS] 레일의 많은 관계로 많은 만들기
RUBY-ON-RAILS레일의 많은 관계로 많은 만들기
이것은 내가 달성하기 위해 노력하고 무엇을 간단하게 예를 들어, 내가 레일에 비교적 새로운 해요 및 모델 사이의 관계를 주위에 내 머리를 얻기 위해 고군분투하고있다.
나는 두 가지 모델, 사용자 모델과 종류의 모델이있다. 사용자는 여러 범주와 연관 될 수 있습니다. 특정 카테고리는 많은 사용자 범주 목록에 표시 할 수 있습니다. 특정 카테고리가 삭제되면, 이것은 사용자에 대한 카테고리 목록에 반영되어야한다.
이 예에서 :
내 카테고리 테이블은 다섯 개 가지 범주를 포함 :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ID | Name | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 1 | Sports | | 2 | News | | 3 | Entertainment | | 4 | Technology | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
내 사용자 테이블은 두 명의 사용자가 포함되어 있습니다
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ID | Name | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 1 | UserA | | 2 | UserB | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
나는 범주와 사용자 모두의 ID를 보유하고 UserCategories 테이블을 생성하여 주위 놀다했습니다. 일의이 종류는, 내가 범주 이름을 찾아 볼 수 있지만, 난 그냥 잘못된 듯 계단식 작업 및 전체 솔루션을 삭제할 수 없습니다.
내가 찾은하는 belongs_to와 has_many 기능을 사용하는 예는 일대일 관계를 매핑 논의 할 것으로 보인다. 예를 들어, 블로그 게시물에 코멘트.
해결법
-
==============================
1.당신은 has_and_belongs_to_many 관계를 원한다. 가이드는 차트 및 모든과 방법이 작품을 설명하는 훌륭한 일을 수행합니다
당신은 has_and_belongs_to_many 관계를 원한다. 가이드는 차트 및 모든과 방법이 작품을 설명하는 훌륭한 일을 수행합니다
http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association
이 같은 끝낼 것입니다 :
# app/models/category.rb class Category < ActiveRecord::Base has_and_belongs_to_many :users end # app/models/user.rb class User < ActiveRecord::Base has_and_belongs_to_many :categories end
이제 당신은 사용에 레일을 위해 테이블을 조인 작성해야합니다. 레일 당신을 위해 자동으로 수행되지 않습니다. 이것은 효과적으로 범주 및 사용자의 각각에 대한 참조없이 기본 키가있는 테이블이다.
이 같은 CLI에서 마이그레이션을 생성합니다 :
bin/rails g migration CreateCategoriesUsersJoinTable
그런 다음를 열고 편집이 일치 :
def change # This is enough; you don't need to worry about order create_join_table :categories, :users # If you want to add an index for faster querying through this join: create_join_table :categories, :users do |t| t.index :category_id t.index :user_id end end
def self.up # Model names in alphabetical order (e.g. a_b) create_table :categories_users, :id => false do |t| t.integer :category_id t.integer :user_id end add_index :categories_users, [:category_id, :user_id] end def self.down drop_table :categories_users end
장소에두고, 당신의 마이그레이션을 실행하고 당신은 당신이 사용하고있는 편리한 접근 모두와 함께 카테고리와 사용자를 연결할 수 있습니다 :
User.categories #=> [<Category @name="Sports">, ...] Category.users #=> [<User @name="UserA">, ...] User.categories.empty?
-
==============================
2.가장 인기있는 '모노 전이 협회는'당신은이 작업을 수행 할 수 있습니다 :
가장 인기있는 '모노 전이 협회는'당신은이 작업을 수행 할 수 있습니다 :
class Book < ApplicationRecord has_many :book_author has_many :author, through: :book_author end # in between class BookAuthor < ApplicationRecord belongs_to :book belongs_to :author end class Author < ApplicationRecord has_many :book_author has_many :book, through: :book_author end
-
==============================
3.그냥 coreyward의 답변을보다 보완 : 당신은 이미 belongs_to, has_many 관계가있는 모델을 가지고 당신은 당신이 필요합니다 동일한 테이블을 사용하여 새 관계 has_and_belongs_to_many을 만들려면 :
그냥 coreyward의 답변을보다 보완 : 당신은 이미 belongs_to, has_many 관계가있는 모델을 가지고 당신은 당신이 필요합니다 동일한 테이블을 사용하여 새 관계 has_and_belongs_to_many을 만들려면 :
rails g migration CreateJoinTableUsersCategories users categories
그때,
rake db:migrate
그 후, 당신은 당신의 관계를 정의해야합니다 :
User.rb :
class Region < ApplicationRecord has_and_belongs_to_many :categories end
Category.rb
class Facility < ApplicationRecord has_and_belongs_to_many :users end
새로운 오래된 데이터를 테이블에 가입 채울하기 위해, 당신은 당신의 콘솔에 필요합니다 :
User.all.find_each do |u| Category.where(user_id: u.id).find_each do |c| u.categories << c end end
당신은 어느 종류와 사용자 테이블의 USER_ID 컬럼 및 CATEGORY_ID 열을 떠나거나 삭제하는 마이그레이션을 생성 할 수 있습니다.
from https://stackoverflow.com/questions/5120703/creating-a-many-to-many-relationship-in-rails by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 어떻게 체인 범위 쿼리에 대한 OR 대신 AND? (0) | 2020.02.06 |
---|---|
[RUBY-ON-RAILS] Heroku가 배치 오류 H10 (APP 추락) (0) | 2020.02.06 |
[RUBY-ON-RAILS] 어떻게 루비 온 레일즈 콘솔에서 컨트롤러 / 뷰 헬퍼 메소드를 호출 할 수 있습니다? (0) | 2020.02.06 |
[RUBY-ON-RAILS] 협회에 계산에 의해 주문 : 3 액티브 레일 (0) | 2020.02.06 |
[RUBY-ON-RAILS] 어떻게 부하 DB에 : 씨앗 데이터 테스트 데이터베이스에 자동으로? (0) | 2020.02.06 |