2014-11-02 1 views
0

:레일 자동 완성 나는 mongoid를 사용하고 난 * 다음과 같습니다 임베디드 구조가

class User 
    field :first_name 
    field :last_name 

    embeds_one :administrateur 
    embeds_many :customers 
    embeds_one :contractor 

가 지금은 둘 다 처음과 마지막에 (고객을 자동으로 완성 할 수 있도록하려면를 이름). 그때 내가 먼저 모든 일치하는 사용자를 검색하는 사용자 클래스에 명명 된 범위를 사용할 수 있다고 생각하지만, :

  • 내가 좋은 구문 올 수없는 제 LAST_NAME (I '의 "자동 완성"에 SQL을 사용하지 않으므로 answer there이 작동하지 않습니다.)
  • 이름이 자동 완성 용어와 일치하는 사용자 목록이 있으면 해당하는 포함 된 문서를 가져와야합니다.

그래서 나는 이러한 종류의 코드가 작동 것이라고 믿습니다

@customers = Array.new 
User.by_name(params[:term]).each do |user| 
    @customers << user.customers 
end 

난 그냥 이름이 지정된 범위 User.by_name를 구현해야합니다. 그걸 도와 줄 수 있니?

* 아이디어 : 관리자, 계약자 또는 고객이 될 수 있습니다 (여러 연관성, 사람들이 삶에서 진화하기 때문에 다음을 알고 있습니다 : D). LDAP 기반 기밀성 인증을 용이하게하기 위해 다른 것을 포함시키는 하나의 모델을 갖는이 구조가 선택되었습니다.

답변

0

내가 mongoid

에 대한
class User 
    ... 
    scope :by_first_name, ->(regex){ 
     where(:first_name => /#{Regexp.escape(regex)}/i) 
    } 
    scope :by_last_name, ->(regex){ 
     where(:last_name => /#{Regexp.escape(regex)}/i) 
    } 
    scope :by_name, ->(regex){ 
     any_of([by_first_name(regex).selector, by_last_name(regex).selector]) 
    } 
함께했다 구문