From be5eca415f2079b82573e11dbba3af39003cce44 Mon Sep 17 00:00:00 2001 From: Rafael Martins Date: Sat, 5 May 2012 00:13:13 -0300 Subject: [PATCH] Small fixes for searchable classes (Article, Product, Profile) --- app/models/article.rb | 11 ++++++----- app/models/product.rb | 27 ++++++++++++++------------- app/models/profile.rb | 9 +++++---- 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/app/models/article.rb b/app/models/article.rb index e48a08f..8364cb5 100644 --- a/app/models/article.rb +++ b/app/models/article.rb @@ -28,7 +28,7 @@ class Article < ActiveRecord::Base has_many :article_categorizations, :conditions => [ 'articles_categories.virtual = ?', false ] has_many :categories, :through => :article_categorizations - has_many :article_categorizations_including_virtual, :class_name => 'ArticleCategorization' + has_many :article_categorizations_including_virtual, :class_name => 'ArticleCategorization', :dependent => :destroy has_many :categories_including_virtual, :through => :article_categorizations_including_virtual, :source => :category acts_as_having_settings :field => :setting @@ -104,12 +104,13 @@ class Article < ActiveRecord::Base @pending_categorizations ||= [] end - def add_category(c) - if self.id - ArticleCategorization.add_category_to_article(c, self) - else + def add_category(c, reload=false) + if new_record? pending_categorizations << c + else + ArticleCategorization.add_category_to_article(c, self) end + self.categories(reload) end def category_ids=(ids) diff --git a/app/models/product.rb b/app/models/product.rb index 3279212..af0f9d0 100644 --- a/app/models/product.rb +++ b/app/models/product.rb @@ -198,13 +198,14 @@ class Product < ActiveRecord::Base def percentage_from_solidarity_economy se_i = t_i = 0 - self.inputs.each{ |i| t_i += 1; se_i += 1 if i.is_from_solidarity_economy } - p = case (se_i.to_f/t_i)*100 - when 0..24.999 then [0, _("")]; + self.inputs(true).each{ |i| t_i += 1; se_i += 1 if i.is_from_solidarity_economy } + t_i = 1 if t_i == 0 # avoid division by 0 + p = case (se_i.to_f/t_i)*100 + when 0..24.999 then [0, _("")]; when 25..49.999 then [25, _("25%")]; when 50..74.999 then [50, _("50%")]; when 75..99.999 then [75, _("75%")]; - when 100 then [100, _("100%")]; + when 100 then [100, _("100%")]; end end @@ -260,15 +261,15 @@ class Product < ActiveRecord::Base :order => [:f_category, :f_region, :f_qualifier] Boosts = [ - [:image, 0.4, proc{ |p| p.image ? 1 : 0}], - [:qualifiers, 0.3, proc{ |p| p.product_qualifiers.count > 0 ? 1 : 0}], - [:open_price, 0.3, proc{ |p| p.price_described? ? 1 : 0}], - [:solidarity, 0.3, proc{ |p| p.inputs.count > 0 ? p.percentage_from_solidarity_economy[0]/100 : 0 }], - [:available, 0.2, proc{ |p| p.available ? 1 : 0}], - [:price, 0.2, proc{ |p| (!p.price.nil? and p.price > 0) ? 1 : 0}], - [:new_product, 0.2, proc{ |p| (p.updated_at.to_i - p.created_at.to_i) < 24*3600 ? 1 : 0}], - [:description, 0.15, proc{ |p| (!p.description.nil? and !p.description.empty?) ? 1 : 0}], - [:enabled, 0.05, proc{ |p| p.enterprise.enabled ? 1 : 0}], + [:image, 0.55, proc{ |p| p.image ? 1 : 0}], + [:qualifiers, 0.45, proc{ |p| p.product_qualifiers.count > 0 ? 1 : 0}], + [:open_price, 0.45, proc{ |p| p.price_described? ? 1 : 0}], + [:solidarity, 0.45, proc{ |p| p.percentage_from_solidarity_economy[0].to_f/100 }], + [:available, 0.35, proc{ |p| p.available ? 1 : 0}], + [:price, 0.35, proc{ |p| (!p.price.nil? and p.price > 0) ? 1 : 0}], + [:new_product, 0.35, proc{ |p| (p.updated_at.to_i - p.created_at.to_i) < 24*3600 ? 1 : 0}], + [:description, 0.3, proc{ |p| !p.description.blank? ? 1 : 0}], + [:enabled, 0.2, proc{ |p| p.enterprise.enabled ? 1 : 0}], ] acts_as_searchable :fields => facets_fields_for_solr + [ diff --git a/app/models/profile.rb b/app/models/profile.rb index 977d775..8a4aef2 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -231,12 +231,13 @@ class Profile < ActiveRecord::Base @pending_categorizations ||= [] end - def add_category(c) - if self.id - ProfileCategorization.add_category_to_profile(c, self) - else + def add_category(c, reload=false) + if new_record? pending_categorizations << c + else + ProfileCategorization.add_category_to_profile(c, self) end + self.categories(reload) end def category_ids=(ids) -- libgit2 0.21.2