2014-02-22 13 views
0

갤러리 모델은 has_many :photoshas_one을 올바르게 사용하기

입니다.

각 갤러리마다 고유 한 feature_photo을 갖고 싶습니다. 내 첫 번째 본능

class Gallery 
    has_one :feature_photo 

그래서 난 @gallery.feature_photo을 할 수있을 것입니다해야했다 지금 내가해야 볼 나는 feature_photo_id

을함으로써 자신의 갤러리 모델에서 각 기능의 사진의 사진이 부착 된 신분증을 절약 할 수 belongs_to를 사용하지만, 의미의 혼란을 사진에 속하는 나던 갤러리가

가 지금은 완전히 혼란 스러워요 때문에 ..

내가 has_one이나 belongs_to 사용해야하고 어떻게 has_many 사용할 수 있습니다 feature_과 함께 사진을 갤러리의 사진?

답변

1

belongs_to는 부모 개체가없는 자식 개체가 없을 때 사용됩니다. 귀하의 경우 feature_photo는 갤러리와 관련이 있어야하며 독립적으로 존재할 수 없습니다. 따라서 has_one을 사용하는 것이 의미가 있습니다. mongodb를 사용하는 경우 embeds_one 관계를 사용할 수 있습니다. 참조 http://two.mongoid.org/docs/relations/embedded/1-1.html

위의 시나리오에서 갤러리에는 has_many 사진 및 갤러리 has_one feature_photo가 있습니다. 이것을 두 가지 방식으로 처리 할 수 ​​있습니다.

1) 사진 테이블에 부울 사진을 추가할지 여부를 나타내는 부울 필드를 추가합니다. 한 장의 사진 만이이 접근법에 문제가있어 현장에 '참'가치가 있습니다. 사진 모음이 많으면 참/거짓 값을 저장하기 위해 많은 공간을 낭비하게됩니다.

2) 갤러리에 feature_photo_id 필드를 추가하고 사진의 ID를 저장하십시오. feature_photo를 검색하는 메소드를 작성하십시오. 이 방법의 문제점은 모든 논리를 직접 작성해야한다는 것입니다.

class Gallery 
    has_many :photos 

    def feature_photo 
    photos.where(id: feature_photo_id).first 
    end 
end 

두 번째 방법을 선호합니다.

+0

네 말이 맞지만 어떻게 has_one : feature_photo를 has_many : photos와 함께 사용할 수 있습니까? 사진에 이미 gallery_id가 있습니다. –