opportunity.rb
1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class SnifferPlugin::Opportunity < ApplicationRecord
self.table_name = :sniffer_plugin_opportunities
belongs_to :profile
belongs_to :opportunity, polymorphic: true
# for has_many :through
belongs_to :product_category, -> {
where 'sniffer_plugin_opportunities.opportunity_type = ?', 'ProductCategory'
}, class_name: '::ProductsPlugin::ProductCategory', foreign_key: :opportunity_id
# getter
def product_category
opportunity_type == 'ProductCategory' ? opportunity : nil
end
scope :product_categories, -> {
where 'sniffer_plugin_opportunities.opportunity_type = ?', 'ProductCategory'
}
if defined? SolrPlugin
acts_as_searchable fields: [
# searched fields
# filtered fields
# ordered/query-boosted fields
], include: [
{product_category: {fields: [:name, :path, :slug, :lat, :lng, :acronym, :abbreviation]}},
]
handle_asynchronously :solr_save
end
delegate :lat, :lng, :to => :product_category, :allow_nil => true
# delegate missing methods to opportunity
def method_missing method, *args, &block
if self.opportunity.respond_to? method
self.opportunity.send method, *args, &block
else
super method, *args, &block
end
end
def respond_to_with_opportunity? method, p2 = true
respond_to_without_opportunity? method, p2 or (self.opportunity and self.opportunity.respond_to? method)
end
alias_method_chain :respond_to?, :opportunity
end