0

如何validates_uniqueness_of用於elasticsearch持久性。我有一個模型包含語句validates_uniqueness_of elasticsearch持久性

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 
+0

您可以粘貼代碼的位置嗎?也請分享任何可能有用的堆棧跟蹤。 – Val

+0

添加stacktrace和類validates_uniqueness_of –

回答

0

不改變Elasticsearch::Persistence::Model我基本上創建自己的驗證,因爲我沒有看到比presence其他任何驗證來定義。總之,您必須製作一個must search以確保它不存在

profiles = Profile.search query:{bool:{must:[{match:{username: "xxxxx"}}]}} 
0

validates_uniqueness_ofclass method 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 
+0

我沒有使用任何常規數據庫和使用elasticsearch作爲持久性。另外根據這裏的文檔https://github.com/elastic/elasticsearch-rails/tree/master/elasticsearch-persistence你可以使用驗證'validates:title,presence:true' –

+0

我在這裏問的是其他驗證我可以在這裏使用,我似乎沒有找到其他的東西 –