0

如何validates_uniqueness_of进行弹性搜索持久性。我有一个带有 include 语句的模型

include Elasticsearch::Persistence::Model

我想包括一个唯一性验证,比如 validates_uniqueness_of :username

当我尝试使用new函数 进行初始化时NoMethodError: undefined method validates_uniqueness_of for class

痕迹

undefined method `validates_uniqueness_of' for #<Profile:0x007fd83c2b8a10>
    from profile.rb:22:in `block in <class:Profile>'
    from /Users/a6001096/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:446:in `instance_exec'
    from /Users/a6001096/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:446:in `block in make_lambda'
    from /Users/a6001096/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:164:in `call'
    from /Users/a6001096/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:164:in `block in halting'
    from /Users/a6001096/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:504:in `call'
    from /Users/a6001096/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:504:in `block in call'
    from /Users/a6001096/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:504:in `each'
    from /Users/a6001096/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:504:in `call'
    from /Users/a6001096/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:92:in `__run_callbacks__'
    from /Users/a6001096/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:778:in `_run_save_callbacks'
    from /Users/a6001096/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.4/lib/active_support/callbacks.rb:81:in `run_callbacks'
    from /Users/a6001096/.rvm/gems/ruby-2.2.2/gems/elasticsearch-persistence-0.1.8/lib/elasticsearch/persistence/model/store.rb:51:in `save'
    from (irb):5



class Profile
  include Elasticsearch::Persistence::Model

  attribute :user_id
  attribute :username, String, mapping: { index: 'not_analyzed' }
  attribute :image_url

  validates_uniqueness_of :username

end
4

2 回答 2

0

validates_uniqueness_of是一个类方法ActiveRecord

您的Profile类应该使用这样的 elasticsearch-model来定义

require 'elasticsearch/model'

class Profile < ActiveRecord::Base
  include Elasticsearch::Model

  attribute :user_id
  attribute :username, String, mapping: { index: 'not_analyzed' }
  attribute :image_url

  validates_uniqueness_of :username
end
于 2016-03-08T05:02:13.357 回答
0

在不改变的情况下,Elasticsearch::Persistence::Model我基本上必须创建自己的验证,因为除了presence. 简而言之,您必须must search确保它不存在

profiles = Profile.search query:{bool:{must:[{match:{username: "xxxxx"}}]}}
于 2016-03-09T16:09:08.677 回答