2011-10-28 3 views
1

내 데이터는 기본적으로 갤러리에는 많은 그림이 있고 그림은 갤러리에 속합니다. 그림 테이블에 foreign_key 'gallery_id'가 있습니다.has_many-belongs_to 연관성 문제

나는 전에 has_many와 belongs_to 연관을 사용 했었지만, 내가 잘못하고있는 것이 확실하지 않습니다.

이 내 관련 모델은 다음과 같습니다

class Gallery < ActiveRecord::Base 
    attr_accessible :name 
    has_many :pictures 
    belongs_to :home 
end 

class Picture < ActiveRecord::Base 
    belongs_to :gallery 
    validates :image, :presence => true 
    mount_uploader :image, ImageUploader 
end 

내가 할 경우이 :

gallery = Gallery.create(:name => 'some name') 
picture = Picture.create(:name => 'some name' , :image => 'some_image') 
picture.gallery = gallery 

이것이 사실 :

picture.gallery == @gallery 

하지만 이러면

gallery.pictures == [ picture ] 
0 gallery.pictures가 빈 배열을 반환하기 때문에

나는 이런 식으로 그림을 만드는 경우 다른 한편으로

는 모든 것이 예상대로 작동합니다

picture = Picture.create(:name => 'some name' , :image => 'some_image', :gallery_id => gallery) 

이유는 무엇입니까? 내가 뭘 잘못하고 있니? 레일 3.1.1 및 sqlite를 사용하고 있습니다

답변

2

가 작동

gallery.pictures.create :name => 'some name' , :image => 'some_image' 
0

갤러리에 그림을 추가 할 때. 과제를 다른 방향으로 시도해보십시오.

gallery = Gallery.create(:name => 'some name') 
picture = Picture.create(:name => 'some name' , :image => 'some_image') 
gallery.pictures << picture 

그러면 #pictures 메서드가 업데이트되어 새로 할당 된 그림이 반환됩니다.

+0

감사를 작동해야하지만 난 아직도 이해 해달라고 왜 내 질문에 나던 작업의 코드. 모든 단서? –

+0

레일스가 모델을 캐싱하는 방식 때문에'갤러리 '를 데이터베이스에서 다시로드해야하기 때문에 네. 갤러리에 그림을 지정한 후에'gallery.reload'를 호출하면 모두 잘 작동합니다. –