Module: Mongoid::TaggableOn::ClassMethods
- Defined in:
- lib/mongoid/taggable_on.rb
Instance Method Summary collapse
- #split_tag(value) ⇒ Object
-
#taggable_on(field_name, opts = {}) ⇒ Object
rdoc =Define a tag field *For example:*.
Instance Method Details
#split_tag(value) ⇒ Object
105 106 107 |
# File 'lib/mongoid/taggable_on.rb', line 105 def split_tag(value) value.split(%r{,|,|/|\|}).collect(&:strip).uniq end |
#taggable_on(field_name, opts = {}) ⇒ Object
rdoc
Define a tag field
*For example:*
class Person
include Mongoid::Document
include Mongoid::TaggableOn
taggable_on :languages
taggable_on :skills
end
*Then will has there methods and fields:*
field :languages, :type => Array, :default => []
def language_list; end
def language_list=(value); end
field :skills, :type => Array, :default => []
def skill_list; end
def skill_list=(value); end
Params
* field_name <em>name for tag field</em>
* opts[:index] <em>(true/false) allow create index in MongoDB, default: true</em>
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/mongoid/taggable_on.rb', line 69 def taggable_on(field_name, opts = {}) field_name = field_name.to_s.tableize field_name_single = field_name.singularize index_code = "" if opts[:index] != false index_code = "index({#{field_name}: '2d'}, {background: true})" end class_eval %{ field :#{field_name}, :type => Array, :default => [] #{index_code} def #{field_name_single}_list=(value) if !value.blank? self.#{field_name} = self.class.split_tag(value) end end def #{field_name_single}_list return "" if self.#{field_name}.blank? self.#{field_name}.join(",") end def #{field_name_single}_list_was return "" if self.#{field_name}_was.blank? self.#{field_name}_was.join(",") end def #{field_name_single}_list_changed? self.#{field_name}_changed? end } end |