2013-04-19 4 views
0

Mongoid 3 - Check for uniqueness of composite key의 조언에 따라 2 개의 필드에 고유 한 제약 조건이있는 모델을 사용하려고합니다.복합 키에 대한 몽고 이드 고유 제약

ID입니다 선언은 이것이다 :

field :_id, type: String, default: &method(:generate_id) 

private 

    def generate_id 
    user.id.to_s + offering.id.to_s 
    end 

하지만 이렇게하면은 그것을 사용자와 제공을 가지고 전에 ID를 생성하려고하기 때문에 나는 새를 통해 개체를 인스턴스화 할 때, 그것은 히스테리의 발작을 가지고 (맞다) id를 사용하지 않으려 고한다. 나는 사용자를 전달할 수 있으며 생성자 매개 변수로 제공하고 모든 것이 좋습니다.

제 질문은 이것이 올바른 방법인가요? 유일한 제약 조건을 얻기 위해해야 ​​할 모든 둔한 기질을 감안할 때 더러워진 느낌입니다. 이 코드는 전혀 공개하지 않습니다. 더 좋은 방법이 있습니까?

db.registrations.ensureIndex({ "user_id": 1, "offering_id": 1 }, { unique: true }) 

은 Mongoid이 인덱스를 생성 모델에이를 추가하려면 :

index({ user_id: 1, offering_id: 1 }, { unique: true }) 
당신과 같이 자바 스크립트로이 인덱스를 만들 것입니다 일반 MongoDB를 통해

답변

7

(컬렉션 이름 가정은 등록입니다)

그리고 rake db:mongoid:create_indexes을 실행하십시오.

_idgenerate_id으로 계속 생성하려면 세대를 before_validate 콜백으로 이동할 수 있습니다.

field :_id, type: String 

before_validate :generate_id 

private 

def generate_id 
    self._id ||= "#{user.id}:#{offering}" 
end 
+0

이것은 내가 원하는 것보다 훨씬 더 많이 느껴지며 코드는 실제로 성취하고자하는 것을 반영합니다. 감사! –