subj_sub_models 0.0.0 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/.idea/modules.xml +1 -1
- data/.idea/workspace.xml +5 -5
- data/Gemfile +1 -1
- data/README.md +3 -3
- data/bin/console +1 -1
- data/lib/subj_models/access_group.rb +22 -0
- data/lib/subj_models/action_banner.rb +37 -0
- data/lib/subj_models/attribute_value.rb +32 -0
- data/lib/subj_models/brand.rb +74 -0
- data/lib/subj_models/brand_line.rb +51 -0
- data/lib/subj_models/category.rb +36 -0
- data/lib/subj_models/city.rb +31 -0
- data/lib/subj_models/concerns/comprising_external_id.rb +37 -0
- data/lib/subj_models/concerns/shared_scopes.rb +15 -0
- data/lib/subj_models/content_block.rb +28 -0
- data/lib/subj_models/document_file.rb +38 -0
- data/lib/subj_models/event.rb +79 -0
- data/lib/subj_models/event_booking.rb +39 -0
- data/lib/subj_models/event_schedule.rb +37 -0
- data/lib/subj_models/event_type.rb +27 -0
- data/lib/subj_models/faq.rb +46 -0
- data/lib/subj_models/global_notification.rb +16 -0
- data/lib/subj_models/manager.rb +31 -0
- data/lib/subj_models/measure_unit.rb +28 -0
- data/lib/subj_models/nomenclature.rb +166 -0
- data/lib/subj_models/nomenclature_access_group.rb +19 -0
- data/lib/subj_models/nomenclature_attribute.rb +27 -0
- data/lib/subj_models/nomenclature_file.rb +44 -0
- data/lib/subj_models/nomenclature_photo.rb +36 -0
- data/lib/subj_models/nomenclature_price.rb +39 -0
- data/lib/subj_models/nomenclature_review.rb +38 -0
- data/lib/subj_models/nomenclature_variety.rb +29 -0
- data/lib/subj_models/office.rb +40 -0
- data/lib/subj_models/office_contact.rb +41 -0
- data/lib/subj_models/order.rb +91 -0
- data/lib/subj_models/order_delivery_courier.rb +31 -0
- data/lib/subj_models/order_delivery_nova_poshta_warhouse.rb +20 -0
- data/lib/subj_models/order_delivery_pickup.rb +28 -0
- data/lib/subj_models/order_delivery_privatbank.rb +29 -0
- data/lib/subj_models/order_delivery_subj_courier.rb +25 -0
- data/lib/subj_models/order_item.rb +60 -0
- data/lib/subj_models/quality.rb +25 -0
- data/lib/subj_models/services/types_support.rb +122 -0
- data/lib/subj_models/services/values_checker.rb +11 -0
- data/lib/subj_models/specialist_activity.rb +33 -0
- data/lib/subj_models/specialist_activity_document_type.rb +29 -0
- data/lib/subj_models/template.rb +18 -0
- data/lib/subj_models/user.rb +131 -0
- data/lib/subj_models/user_card.rb +29 -0
- data/lib/subj_models/user_card_delivery.rb +29 -0
- data/lib/subj_models/user_delivery_address.rb +34 -0
- data/lib/subj_models/user_specialization.rb +38 -0
- data/lib/subj_models/user_specialization_approval.rb +33 -0
- data/lib/subj_models/user_work_place.rb +29 -0
- data/lib/subj_models/version.rb +3 -0
- data/lib/subj_models/video.rb +29 -0
- data/lib/subj_models.rb +49 -0
- data/subj_models.gemspec +33 -0
- data/subj_models.iml +9 -0
- metadata +56 -2
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'subj_models/concerns/comprising_external_id'
|
2
|
+
|
3
|
+
module SubjModels
|
4
|
+
|
5
|
+
module ContentBlockModule
|
6
|
+
|
7
|
+
def self.included(including_class)
|
8
|
+
|
9
|
+
including_class.class_eval do
|
10
|
+
|
11
|
+
include SubjModels::ComprisingExternalId
|
12
|
+
|
13
|
+
belongs_to :document_file
|
14
|
+
has_one :brand
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
brands = Brand.where('content_block1_id=? OR (content_block2_id=? OR content_block3_id=?)', id, id, id)
|
22
|
+
addition_text = brands.any? ? "#{brands.first.try(:name)}" : 'Без бренда'
|
23
|
+
"#{title} - " + addition_text
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'subj_models/concerns/comprising_external_id'
|
2
|
+
|
3
|
+
module SubjModels
|
4
|
+
|
5
|
+
module DocumentFileModule
|
6
|
+
|
7
|
+
def self.included(including_class)
|
8
|
+
|
9
|
+
including_class.class_eval do
|
10
|
+
|
11
|
+
include SubjModels::ComprisingExternalId
|
12
|
+
|
13
|
+
has_one :nomenclature_photo
|
14
|
+
has_one :nomenclature_file
|
15
|
+
has_one :brand_line
|
16
|
+
has_one :user
|
17
|
+
has_one :manager
|
18
|
+
has_one :user_specialization_approval
|
19
|
+
|
20
|
+
has_many :videos
|
21
|
+
has_many :brands
|
22
|
+
|
23
|
+
mount_uploader :file_data, PhotoUploader
|
24
|
+
mount_uploader :alternative_file_data, PhotoUploader
|
25
|
+
|
26
|
+
validates :file_data, presence: true
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_s
|
33
|
+
id.to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'subj_models/concerns/comprising_external_id'
|
2
|
+
|
3
|
+
module SubjModels
|
4
|
+
|
5
|
+
module EventModule
|
6
|
+
|
7
|
+
def self.included(including_class)
|
8
|
+
|
9
|
+
including_class.class_eval do
|
10
|
+
|
11
|
+
include SubjModels::ComprisingExternalId
|
12
|
+
|
13
|
+
belongs_to :manager
|
14
|
+
belongs_to :event_type
|
15
|
+
belongs_to :nomenclature
|
16
|
+
belongs_to :document_file
|
17
|
+
belongs_to :brand
|
18
|
+
|
19
|
+
has_one :event_schedule
|
20
|
+
has_one :nomenclature_price
|
21
|
+
|
22
|
+
has_many :order_items
|
23
|
+
has_many :event_bookings
|
24
|
+
|
25
|
+
has_and_belongs_to_many :user_specializations
|
26
|
+
has_and_belongs_to_many :nomenclatures
|
27
|
+
|
28
|
+
validates :document_file, :title, presence: true
|
29
|
+
|
30
|
+
scope :from_today, -> {
|
31
|
+
Event.joins(:event_schedule).where('event_schedules.event_date >= ?', DateTime.now.beginning_of_day )
|
32
|
+
.includes(:event_schedule).order( 'event_schedules.event_date ASC' ).uniq
|
33
|
+
}
|
34
|
+
|
35
|
+
scope :where_nomenclature_ids, -> (ids) do
|
36
|
+
joins(:nomenclatures).where(nomenclatures: {id: ids})
|
37
|
+
end
|
38
|
+
|
39
|
+
scope :office_ids, -> (ids) do
|
40
|
+
joins(event_schedule: [:office]).where(event_schedule: { office: {id: ids}})
|
41
|
+
end
|
42
|
+
|
43
|
+
scope :type_ids, -> (ids) do
|
44
|
+
joins(:event_type).where(event_type: {id: ids})
|
45
|
+
end
|
46
|
+
|
47
|
+
scope :brand_ids, -> (ids) do
|
48
|
+
joins(:brand).where(brand: { id: ids})
|
49
|
+
end
|
50
|
+
|
51
|
+
scope :only_free, -> do
|
52
|
+
joins(:event_schedule).where(event_schedule: { is_free: true } )
|
53
|
+
end
|
54
|
+
|
55
|
+
scope :specialities_ids, -> (ids) do
|
56
|
+
joins(:user_specializations).where(user_specializations: { id: ids})
|
57
|
+
end
|
58
|
+
|
59
|
+
scope :date_range, -> (date) do
|
60
|
+
joins(:event_schedule)
|
61
|
+
.where(event_schedule: { event_date: DateTime.parse(date['from']).beginning_of_day..DateTime.parse(date['to']).end_of_day } )
|
62
|
+
end
|
63
|
+
|
64
|
+
scope :today_events, -> {
|
65
|
+
includes(:event_schedule).where(event_schedule: { event_date: DateTime.now.beginning_of_day..DateTime.now.end_of_day } )
|
66
|
+
}
|
67
|
+
scope :is_public, -> { where(is_public: true) }
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
def to_s
|
74
|
+
title.to_s
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'subj_models/concerns/comprising_external_id'
|
2
|
+
|
3
|
+
module SubjModels
|
4
|
+
|
5
|
+
module EventBookingModule
|
6
|
+
|
7
|
+
def self.included(including_class)
|
8
|
+
|
9
|
+
including_class.class_eval do
|
10
|
+
|
11
|
+
include SubjModels::ComprisingExternalId
|
12
|
+
|
13
|
+
belongs_to :order
|
14
|
+
belongs_to :user
|
15
|
+
belongs_to :event
|
16
|
+
|
17
|
+
validates :user, uniqueness: { scope: :event }
|
18
|
+
|
19
|
+
scope :user_id , -> (user_id) {where(user_id: user_id)}
|
20
|
+
scope :event_id , -> (event_id) {where(event_id: event_id)}
|
21
|
+
scope :only_new, -> (condition) do
|
22
|
+
if condition
|
23
|
+
where(external_id: nil)
|
24
|
+
else
|
25
|
+
all
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_s
|
34
|
+
id.to_s
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'subj_models/services/values_checker'
|
2
|
+
require 'subj_models/services/types_support'
|
3
|
+
require 'subj_models/concerns/comprising_external_id'
|
4
|
+
|
5
|
+
module SubjModels
|
6
|
+
|
7
|
+
module EventScheduleModule
|
8
|
+
|
9
|
+
include SubjModels::TypesSupport::EventTypes
|
10
|
+
include SubjModels::ValuesChecker
|
11
|
+
|
12
|
+
def self.included(including_class)
|
13
|
+
|
14
|
+
including_class.class_eval do
|
15
|
+
|
16
|
+
include SubjModels::ComprisingExternalId
|
17
|
+
|
18
|
+
enum event_type: EVENT_TYPES
|
19
|
+
|
20
|
+
belongs_to :event
|
21
|
+
belongs_to :office
|
22
|
+
|
23
|
+
validates :event_date, presence: true
|
24
|
+
|
25
|
+
scope :event_id, -> (event_id) { parent_id_scope(event_id: event_id) }
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_s
|
32
|
+
id.to_s # TODO
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'subj_models/concerns/comprising_external_id'
|
2
|
+
|
3
|
+
module SubjModels
|
4
|
+
|
5
|
+
module EventTypeModule
|
6
|
+
|
7
|
+
def self.included(including_class)
|
8
|
+
|
9
|
+
including_class.class_eval do
|
10
|
+
|
11
|
+
include SubjModels::ComprisingExternalId
|
12
|
+
|
13
|
+
has_many :events
|
14
|
+
|
15
|
+
validates :name, presence: true
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_s
|
22
|
+
name
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'subj_models/concerns/comprising_external_id'
|
2
|
+
|
3
|
+
module SubjModels
|
4
|
+
|
5
|
+
module FaqModule
|
6
|
+
|
7
|
+
include SubjModels::TypesSupport::FaqTypes
|
8
|
+
include SubjModels::ValuesChecker
|
9
|
+
|
10
|
+
def self.included(including_class)
|
11
|
+
|
12
|
+
including_class.class_eval do
|
13
|
+
|
14
|
+
include SubjModels::ComprisingExternalId
|
15
|
+
|
16
|
+
enum faq_type: FAQ_TYPES
|
17
|
+
|
18
|
+
after_save :notify_user
|
19
|
+
|
20
|
+
validates :question, presence: true, allow_blank: false,
|
21
|
+
uniqueness: { message: 'Простите, такой вопрос уже был задан' }
|
22
|
+
validates :faq_type, inclusion: { in: faq_types.keys },
|
23
|
+
on: :update
|
24
|
+
|
25
|
+
scope :with_answer, -> { where.not(answer: nil) }
|
26
|
+
scope :without_answer, -> { where(answer: nil) }
|
27
|
+
scope :on_site, -> { where(show_on_site: true) }
|
28
|
+
scope :type_is, -> (condition) { where(faq_type: condition) }
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_s
|
35
|
+
question
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def notify_user
|
41
|
+
FaqMailer.notify_user(self).deliver if send_to_user
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'subj_models/concerns/comprising_external_id'
|
2
|
+
require 'subj_models/concerns/shared_scopes'
|
3
|
+
|
4
|
+
module SubjModels
|
5
|
+
|
6
|
+
module ManagerModule
|
7
|
+
|
8
|
+
def self.included(including_class)
|
9
|
+
|
10
|
+
including_class.class_eval do
|
11
|
+
|
12
|
+
include SubjModels::SharedScopes
|
13
|
+
include SubjModels::ComprisingExternalId
|
14
|
+
|
15
|
+
belongs_to :document_file
|
16
|
+
has_many :events
|
17
|
+
|
18
|
+
validates :email, uniqueness: { case_sensitive: false }
|
19
|
+
validates :first_name, :last_name, :email, :phone, :document_file, presence: true
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_s
|
26
|
+
"#{first_name} #{last_name}"
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'subj_models/concerns/comprising_external_id'
|
2
|
+
|
3
|
+
module SubjModels
|
4
|
+
|
5
|
+
module MeasureUnitModule
|
6
|
+
|
7
|
+
def self.included(including_class)
|
8
|
+
|
9
|
+
including_class.class_eval do
|
10
|
+
|
11
|
+
include SubjModels::ComprisingExternalId
|
12
|
+
|
13
|
+
belongs_to :attribute_value
|
14
|
+
|
15
|
+
has_many :nomenclature_prices
|
16
|
+
|
17
|
+
validates :name, presence: true
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_s
|
24
|
+
name
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,166 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'subj_models/concerns/comprising_external_id'
|
3
|
+
|
4
|
+
module SubjModels
|
5
|
+
|
6
|
+
module NomenclatureModule
|
7
|
+
|
8
|
+
def self.included(including_class)
|
9
|
+
|
10
|
+
including_class.class_eval do
|
11
|
+
|
12
|
+
include SubjModels::ComprisingExternalId
|
13
|
+
|
14
|
+
belongs_to :brand_line
|
15
|
+
belongs_to :brand
|
16
|
+
belongs_to :user_specialization
|
17
|
+
belongs_to :category
|
18
|
+
|
19
|
+
has_many :nomenclature_varieties, dependent: :destroy
|
20
|
+
has_many :nomenclature_photos, dependent: :destroy
|
21
|
+
has_many :nomenclature_reviews, dependent: :destroy
|
22
|
+
has_many :nomenclature_files, dependent: :destroy
|
23
|
+
has_many :attribute_values, dependent: :destroy
|
24
|
+
has_many :nomenclature_prices, dependent: :destroy
|
25
|
+
|
26
|
+
belongs_to :analog_related_nomenclature, class_name: "Nomenclature"
|
27
|
+
has_many :analogs, foreign_key: "analog_related_nomenclature_id", class_name: "Nomenclature"
|
28
|
+
belongs_to :bought_together_related_nomenclature, class_name: "Nomenclature"
|
29
|
+
has_many :bought_together, foreign_key: "bought_together_related_nomenclature_id", class_name: "Nomenclature"
|
30
|
+
|
31
|
+
has_and_belongs_to_many :action_banners
|
32
|
+
has_and_belongs_to_many :access_groups, through: :nomenclature_access_groups
|
33
|
+
has_and_belongs_to_many :events
|
34
|
+
|
35
|
+
validates :name, presence: true
|
36
|
+
|
37
|
+
scope :with_category, -> { where.not(category_id: nil) }
|
38
|
+
scope :brand_line_ids, -> (brand_line_id) { where(brand_line_id: brand_line_id) }
|
39
|
+
scope :with_action, -> { joins(:action_banners).distinct }
|
40
|
+
scope :is_recommended, -> condition { where(is_recommended: condition) }
|
41
|
+
scope :in_index_list, -> condition { where(show_on_index: condition) }
|
42
|
+
scope :is_stock, -> (condition) do
|
43
|
+
nomenclature_prices_join.joins("LEFT OUTER JOIN qualities ON qualities.id = nomenclature_prices.quality_id").where("qualities.is_stock" => condition).uniq
|
44
|
+
end
|
45
|
+
|
46
|
+
scope :bought_together_external_id, -> (ids) do
|
47
|
+
joins(:bought_together_related_nomenclature).where(bought_together_related_nomenclature: {external_id: ids }).uniq
|
48
|
+
end
|
49
|
+
|
50
|
+
scope :is_available, -> (params) do
|
51
|
+
is_available = params.first
|
52
|
+
return all unless is_available == 'true'
|
53
|
+
user = User.find_by(id: params.second.to_i)
|
54
|
+
not_professional_ids = Nomenclature.is_professional(false).pluck(:id)
|
55
|
+
ids = user ? user.available_nomenclature_ids.concat(not_professional_ids) : []
|
56
|
+
where(id: ids)
|
57
|
+
end
|
58
|
+
|
59
|
+
scope :only_promotional, -> do
|
60
|
+
joins(:action_banners).uniq
|
61
|
+
end
|
62
|
+
|
63
|
+
scope :is_professional, -> (condition) {where(is_professional: condition) }
|
64
|
+
|
65
|
+
scope :price, -> (prices) do
|
66
|
+
prices = prices.map { |p| p.split(',') }
|
67
|
+
nomenclature_prices_join.
|
68
|
+
where(
|
69
|
+
prices.map do |range|
|
70
|
+
if range[0] && range[1]
|
71
|
+
'(nomenclature_prices.current_price >= ? AND nomenclature_prices.current_price < ?)'
|
72
|
+
elsif range[0]
|
73
|
+
'(nomenclature_prices.current_price >= ?)'
|
74
|
+
elsif range[1]
|
75
|
+
'(nomenclature_prices.current_price < ?)'
|
76
|
+
end
|
77
|
+
end.join(' OR '),
|
78
|
+
*prices.map(&:compact).flatten
|
79
|
+
)
|
80
|
+
end
|
81
|
+
|
82
|
+
scope :order_by_name, -> (ordering) do
|
83
|
+
ordering = ordering.second.try(:to_sym)
|
84
|
+
if [:asc, :desc].include? ordering
|
85
|
+
order(name: ordering)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
scope :order_by_popularity, -> (ordering) do
|
90
|
+
ordering = ordering.second.try(:to_sym)
|
91
|
+
if [:asc, :desc].include? ordering
|
92
|
+
order(popularity: ordering)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
scope :attribute_value_ids, -> (attribute_value_name_strings) do
|
97
|
+
query_result = nil
|
98
|
+
nomenclature_ids = ids
|
99
|
+
attribute_value_name_strings.each do |str|
|
100
|
+
attr_names = str.split('/')
|
101
|
+
query_result = Nomenclature.joins(:attribute_values).where("attribute_values.nomenclature_value" => attr_names).where(id: nomenclature_ids).uniq
|
102
|
+
nomenclature_ids = query_result.pluck(:id)
|
103
|
+
end
|
104
|
+
|
105
|
+
query_result
|
106
|
+
end
|
107
|
+
|
108
|
+
scope :nomenclature_prices_join, -> do
|
109
|
+
joins(:nomenclature_prices)
|
110
|
+
#joins('LEFT OUTER JOIN nomenclature_varieties ON nomenclature_varieties.id = (SELECT innerNomVar.id FROM nomenclature_varieties as innerNomVar WHERE innerNomVar.nomenclature_id = nomenclatures.id LIMIT 1)')
|
111
|
+
#.joins('LEFT OUTER JOIN nomenclature_prices on nomenclature_prices.id = (SELECT innerNomPrice.id FROM nomenclature_prices AS innerNomPrice WHERE innerNomPrice.nomenclature_variety_id = nomenclature_varieties.id LIMIT 1)')
|
112
|
+
end
|
113
|
+
|
114
|
+
scope :order_by_price, -> (ordering) do
|
115
|
+
ordering = ordering.second.try(:to_sym)
|
116
|
+
if [:asc, :desc].include? ordering
|
117
|
+
nomenclature_prices_join.
|
118
|
+
order("nomenclature_prices.current_price #{ordering}")
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
scope :category_id, -> (category_id) do
|
123
|
+
return all unless category_id.present?
|
124
|
+
where(category_id: category_id)
|
125
|
+
end
|
126
|
+
|
127
|
+
scope :nomenclature_ids, -> (ids) { where(id: ids) }
|
128
|
+
|
129
|
+
scope :brand_ids, -> (brand) do
|
130
|
+
return all unless brand.present?
|
131
|
+
where(brand: brand)
|
132
|
+
end
|
133
|
+
|
134
|
+
scope :with_brand, -> (brand) do
|
135
|
+
return none unless brand.present?
|
136
|
+
where(brand: brand)
|
137
|
+
end
|
138
|
+
|
139
|
+
scope :brand_line_ids, -> (ids) do
|
140
|
+
return all unless ids.present?
|
141
|
+
where(brand_line_id: ids)
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
def is_bought(user_id)
|
149
|
+
Order.joins(order_items: :nomenclature)
|
150
|
+
.where("nomenclatures.id IN (?)", self.id)
|
151
|
+
.where(user_id: user_id).any?
|
152
|
+
end
|
153
|
+
|
154
|
+
def to_s
|
155
|
+
name.to_s # TODO
|
156
|
+
end
|
157
|
+
|
158
|
+
def self.name_field_update(field)
|
159
|
+
if field.to_s == 'name' #TODO refactor this
|
160
|
+
field = 'name.raw'
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|