2014-11-02 88 views
0

我使用mongoid,我有一個嵌入式結構,看起來像這樣*:導軌自動完成對多個領域的嵌入文檔

class User 
    field :first_name 
    field :last_name 

    embeds_one :administrateur 
    embeds_many :customers 
    embeds_one :contractor 

現在我希望能夠自動完成一個客戶(在第一和最後一個名稱)。我想我可以先使用一個名爲範圍的用戶類來檢索每個匹配的用戶,但後來:

  • 我不能想出好的語法上第一和姓氏(I」「自動完成」 m不使用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]) 
    } 
語法