app/models/caboose_rets/search_option.rb in caboose-rets-0.1.8 vs app/models/caboose_rets/search_option.rb in caboose-rets-0.1.9

- old
+ new

@@ -1,12 +1,15 @@ class CabooseRets::SearchOption < ActiveRecord::Base self.table_name = "rets_search_options" - attr_accessible :id, :name, :field, :value + attr_accessible :id, :name, :field, :value, :flag_for_delete def self.update_search_options + # Flag all for delete + self.update_all(:flag_for_delete => true) + names = { 'City' => ['city'], 'County' => ['county'], 'Zip Code' => ['zip'], 'Schools' => ['elem_school', 'middle_school', 'high_school'], @@ -17,25 +20,37 @@ 'MLS Number' => ['mls_acct'] #'feature', #'location', } names.each do |name, fields| - fields.each do |field| - q = ["select distinct(#{field}) from rets_residential"] - rows = ActiveRecord::Base.connection.select_rows(ActiveRecord::Base.send(:sanitize_sql_array, q)) - rows.each do |row| - so = self.where(:name => name, :field => field, :value => row[0]).first - self.create( :name => name, :field => field, :value => row[0]) if so.nil? - end + fields.each do |field| + self.update_search_options_for_field(name, field) end end + + # Delete all flagged + self.where(:flag_for_delete => true).destroy_all end + def self.update_search_options_for_field(name, field) + q = ["select distinct(#{field}) from rets_residential where (status = ? or status = ?)", 'Pending', 'Active'] + rows = ActiveRecord::Base.connection.select_rows(ActiveRecord::Base.send(:sanitize_sql_array, q)) + rows.each do |row| + so = self.where(:name => name, :field => field, :value => row[0]).first + if so.nil? + self.create(:name => name, :field => field, :value => row[0]) + else + so.flag_for_delete = false + so.save + end + end + end + def self.results(str, count_per_name = 10) q = ["select * from ( select name, field, value, row_number() over (partition by name order by field) as rownum - from rets_search_options - where lower(value) like ? + from rets_search_options + where lower(value) like ? ) tmp where rownum < #{count_per_name}", "%#{str}%"] rows = ActiveRecord::Base.connection.select_rows(ActiveRecord::Base.send(:sanitize_sql_array, q)) arr = rows.collect{ |row| { :name => row[0], :field => row[1], :value => row[2] }} return arr end