2015-01-24 3 views
1

두 개의 테이블, 항목 및 범주와 Items_Categories라는 조인 된 테이블이 있습니다. 내가 가진 한 가지 제한 사항은 항목에 범주가 있어야한다는 것입니다. 내 항목 모델에서many-to-many 관계로 데이터베이스 생성/저장

, 나는이 코드를 가지고 :

카테고리 내 항목 데이터베이스의 열 아니더라도
class Item < ActiveRecord::Base 
    has_many :items_categories 
    has_many :categories, through: :items_categories 
    has_many :item_orders 
    has_many :orders, through: :item_orders 

.

class ItemsCategory < ActiveRecord::Base 
    belongs_to :item 
    belongs_to :category 
end 

가 여기 내 분류 모델의 :

가 여기 내 ItemsCategory 모델의

test 'it is valid' do 
    category = Category.create(name: "hot beverages") 
    item = category.items.create(title: "fjdkasf", description: "fjakdsf", price: 20901290) 

    assert item.valid? 
    end 

기본적으로,이 테스트 때문에 실패 : 내 테스트에서

class Category < ActiveRecord::Base 
    has_many :items_categories 
    has_many :items, through: :items_categories 
end 

, 나는이 문제를 가지고 item.categories가 nill이 아닐 때까지 항목을 만들 수 없습니다. 그러나 item_categories에서 항목을 만들 때까지 유효성 검사가 통과되지 않습니다. 그래서 ... 내가 뭘해야하니? 항목이 아직 범주가 없기 때문에 항목을 만들 때 기본적으로 유효성 검사를 통과 할 수 없습니다. 하지만 항목을 만들 때마다 관련 항목이 있는지 확인하려고합니다. 그래서 내가 뭘하니? has_many :through 관계와

+0

'ItemCategory' 및'Item' 모델의 연결 코드 섹션을 게시 해주십시오. 연결에'inverse_of' 옵션이 누락되었습니다. – sled

답변

0

확인 당신이 당신의 가입 모델에 inverse_of 속성을 정의해야 has_many :through 문서에 힌트가있다, 때로는 까다로운 일이 될 수 있습니다

방금보다는 (연결을 수정하려는 경우 에서 읽음), 조인 모델의 소스 연관에 inverse_of 옵션을 설정하는 것이 좋습니다. 이렇게하면 연관된 레코드 이 작성되어 적절한 조인 모델 레코드가 저장 될 때 자동으로 작성됩니다. 나는이 문제를 해결할 것입니다 100 % 확실하지 않다,

class ItemsCategory < ActiveRecord::Base 
    belongs_to :item, inverse_of: :items_categories 
    belongs_to :category, inverse_of: :items_categories 
end 

는 솔직히. (위의 섹션 협회가 모델에 참여하기 '참조)하지만, 그것을 시도하고 다시보고.