我正在使用mongoid,我有一个看起来像这样的嵌入式结构*:
class User
field :first_name
field :last_name
embeds_one :administrateur
embeds_many :customers
embeds_one :contractor
现在我希望能够自动填充客户(使用姓氏和姓氏)。我想我可以先在User类上使用一个命名范围来检索每个匹配的用户,但是:
所以我相信这种代码会起作用:
@customers = Array.new
User.by_name(params[:term]).each do |user|
@customers << user.customers
end
我只需要实现命名范围User.by_name
。你可以帮忙吗?
* 这个想法:用户可以是管理员,承包商,也可以是客户(多个关联,因为人们在生活中进化,你知道:D)。选择具有嵌入其他模型的一种模型的结构来促进基于LDAP的设计认证。
答案 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])
}