2012-08-08 1 views
3

의 고유성 확인이 나는 복합 필드가 고유 있는지 확인하려고 현재 몇 가지 다른 :)를 만드는 3 Mongoid로 전환에게 :Mongoid 3 복합 키

class Host 
    include Mongoid::Document 

    field :ip, :type => String 
    field :port, :type => Integer 
    field :username, :type => String 
    field :password, :type => String 

    validates_presence_of :ip 
    validates_presence_of :port 
end 

어떻게 validates_uniqueness_of을 거기에 얻을 수있는 ip와 port가 복합 필드로 고유한지 확인해야합니까? AFAIK 여러 필드를 기반으로 새로운 _id를 만들 수 Mongoid 2의 방법이 있었다, 그러나이 Mongoid 3에서 제거하고, 보인다 쉽게를 오버라이드 (override) 할 수 있기 때문에,

key :ip, :port 

답변

6

복합 키 지원이 3에서 제거 default _id 필드를 입력하고 람다를 사용하여 기본값을 설정합니다. 다음과 같이 시도하십시오 :

class Host 
    include Mongoid::Document 
    field :_id, type: String, default: -> { ip + ":" + port } 
    ... 
end 

이 _id 필드의 고유성을 확인할 수 있습니다.

자세한 내용은 몽고이 docs을 참조하십시오.

+0

답변에 많은 감사드립니다. 몽고이 3에서 많은 일이 바뀌 었습니다. :) 그러나 그것은 내가 찾고있는 것으로 보입니다. – ctp

+0

위의 코드에서 구문 오류가 있습니다. 올바른 코드는 다음과 같습니다. ": field : _id, type : String, default : -> {ip +": "+ port}"' d는 원래의 대답을 편집했지만 6 자의 상한을가집니다. – wintersolutions

+0

해결되었습니다. 감사. – Vickash