validates_uniqueness_of 弹性搜索持久化
validates_uniqueness_of elasticsearch persistence
如何 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
validates_uniqueness_of
是一个 class method of ActiveRecord
你的 Profile
class 应该像这样使用 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
在不更改 Elasticsearch::Persistence::Model
的情况下,我基本上必须创建自己的验证,因为除了 presence
之外我没有看到任何验证。简而言之,你必须做一个must search
来确保它不存在
profiles = Profile.search query:{bool:{must:[{match:{username: "xxxxx"}}]}}
如何 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
validates_uniqueness_of
是一个 class method of ActiveRecord
你的 Profile
class 应该像这样使用 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
在不更改 Elasticsearch::Persistence::Model
的情况下,我基本上必须创建自己的验证,因为除了 presence
之外我没有看到任何验证。简而言之,你必须做一个must search
来确保它不存在
profiles = Profile.search query:{bool:{must:[{match:{username: "xxxxx"}}]}}