2014-09-03 4 views
0

도메인과 카테고리 인 두 개의 데이터베이스 테이블이 있습니다.RoR has_and_belongs_to_many

도메인에는 많은 카테고리가있을 수 있으며 카테고리에는 많은 도메인이있을 수 있습니다.

두 모델 모두 has_and_belongs_to_many를 사용하여 설정됩니다.

논리적으로 카테고리가 도메인과 연결된 경우 도메인은 카테고리와 연관됩니다. 그러나 ...

irb(main):062:0> domain.categories.any? 
=> false 
irb(main):063:0> category.domains.any? 
=> true 

내가 무엇이 누락 되었습니까?

+0

모델의 관계를 게시 할 수 있습니까? 마이그레이션이 유용 할 수도 있습니다. – apardes

+0

검사 할 도메인이 특정 범주에 속하는지 확인하고 있습니까? –

+0

'domain.category_ids','category.domain_ids','domain.id' 및'category.id'의 출력을 넣을 수 있습니까? – joseramonc

답변

2

HABTM

후손의 경우,이 설정 다음 있어야합니다 :

#app/models/domain.rb 
class Domain < ActiveRecord::Base 
    has_and_belongs_to_many :categories 
end 

#app/models/category.rb 
class Category < ActiveRecord::Base 
    has_and_belongs_to_many :domains 
end 

#table - categories_domains - category_id | domain_id 

이 당신이 각각의 domain.categories 또는 category.domains 메소드를 호출 할 필요 상대 연결을 제공합니다 사물. (새 것 같은)


협회는

세부 사항을 나에게 레일에 ActiveRecord associations의 중요성을하자, 당신이 아이디어를 강조합니다.

레일은 MVC framework이고 object orientated입니다. 당신이 시작한다면 이것은 의미가 크지 않을 것입니다. 그러나 당신이 진보함에 따라, 그것은 매우 중요하게 될 것입니다.

레일스의 객체 지향 특성은 기능을 추가 할 때마다 주위에 개체를 처리해야한다는 것을 의미합니다. 당신의 목적은 MVC convention에 따라,

당신 동료 객체 (모델), 당신은 기본적으로 (ActiveRecord를 통해) 레일에게 (당신이 Model.new 등을 호출 할 수 있습니다 이유입니다)를 Model 내부에 구축되는 두 개체가 연결됩니다. object relationship mapper - - AR은 ORM로 알려진 것입니다 당신이 더 쉽게 연관 데이터를 호출 할 수 있도록하는 abstraction layer를 제공하는 의미

enter image description here

-

이는 그 두 가지를 연결하려는 경우 객체 (모델)를 함께 사용하려면 기본적으로 각각의 모델에서 두 연관을 정의해야합니다. 그러면 앱의 다른 부분에 기능이 제공됩니다.