Rails自动完成多个字段上的嵌入式文档

时间:2014-11-02 23:20:19

标签: ruby-on-rails autocomplete mongoid multiple-columns

我正在使用mongoid,我有一个看起来像这样的嵌入式结构*:

class User
    field :first_name
    field :last_name

    embeds_one :administrateur
    embeds_many :customers
    embeds_one :contractor

现在我希望能够自动填充客户(使用姓氏和姓氏)。我想我可以先在User类上使用一个命名范围来检索每个匹配的用户,但是:

  • 我无法在first和last_name上找到“autocomplete”的良好语法(我不使用SQL,因此answer there不起作用)
  • 获得名称与自动填充术语相匹配的用户列表后,我必须获取相应的嵌入式文档。

所以我相信这种代码会起作用:

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

我只需要实现命名范围User.by_name。你可以帮忙吗?

* 这个想法:用户可以是管理员,承包商,也可以是客户(多个关联,因为人们在生活中进化,你知道:D)。选择具有嵌入其他模型的一种模型的结构来促进基于LDAP的设计认证。

1 个答案:

答案 0 :(得分: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])
    }