From a39110884d3ee2266d7a83b4ed468e54619ff706 Mon Sep 17 00:00:00 2001 From: Matchu Date: Mon, 28 Jan 2013 02:10:25 -0600 Subject: [PATCH] cut down on pets#load queries --- Gemfile | 2 +- Gemfile.lock | 15 ++++-- app/models/pet.rb | 2 +- ...543_remove_translated_fields_from_items.rb | 13 ++++++ db/schema.rb | 44 ++++++++++++++++-- vendor/cache/globalize3-0.3.0.gem | Bin 13824 -> 0 bytes 6 files changed, 64 insertions(+), 12 deletions(-) create mode 100644 db/migrate/20130128065543_remove_translated_fields_from_items.rb delete mode 100644 vendor/cache/globalize3-0.3.0.gem diff --git a/Gemfile b/Gemfile index 0946cb19..f71de695 100644 --- a/Gemfile +++ b/Gemfile @@ -50,7 +50,7 @@ gem "parallel", "~> 0.5.17" gem "http_accept_language", :git => "git://github.com/iain/http_accept_language.git" -gem "globalize3" +gem "globalize3", :git => "git://github.com/matchu/globalize3.git" # My flex branch fixes a minor pagination bug. Once it's merged into the # original gem, we can switch back. diff --git a/Gemfile.lock b/Gemfile.lock index 02287362..59a0ca86 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -44,6 +44,15 @@ GIT progressbar (~> 0.11.0) prompter (~> 0.1.5) +GIT + remote: git://github.com/matchu/globalize3.git + revision: c7cfc359f9fc8c283e45b3847ec9b9aaedff1d54 + specs: + globalize3 (0.3.0) + activemodel (>= 3.0.0) + activerecord (>= 3.0.0) + paper_trail (~> 2) + GIT remote: git://github.com/matchu/neopets.git revision: d33aaf63d4617d9236ef0d99452b3bdc577cbc8e @@ -137,10 +146,6 @@ GEM nokogiri (~> 1.5.0) ruby-hmac formatador (0.2.4) - globalize3 (0.3.0) - activemodel (>= 3.0.0) - activerecord (>= 3.0.0) - paper_trail (~> 2) haml (3.0.25) hoptoad_notifier (2.4.11) activesupport @@ -284,7 +289,7 @@ DEPENDENCIES factory_girl_rails (~> 1.0) flex! fog (~> 1.8.0) - globalize3 + globalize3! haml (~> 3.0.18) hoptoad_notifier http_accept_language! diff --git a/app/models/pet.rb b/app/models/pet.rb index 91e0e376..567954ed 100644 --- a/app/models/pet.rb +++ b/app/models/pet.rb @@ -129,7 +129,7 @@ class Pet < ActiveRecord::Base if @items @items.each do |item| - item.save! + item.save! if item.changed? item.handle_assets! end end diff --git a/db/migrate/20130128065543_remove_translated_fields_from_items.rb b/db/migrate/20130128065543_remove_translated_fields_from_items.rb new file mode 100644 index 00000000..e1fe7988 --- /dev/null +++ b/db/migrate/20130128065543_remove_translated_fields_from_items.rb @@ -0,0 +1,13 @@ +class RemoveTranslatedFieldsFromItems < ActiveRecord::Migration + def self.up + remove_column :items, :name + remove_column :items, :description + remove_column :items, :rarity + end + + def self.down + add_column :items, :name, :limit => 100, :null => false + add_column :items, :description, :limit => 16777215, :null => false + add_columm :items, :rarity, :limit => 25 + end +end diff --git a/db/schema.rb b/db/schema.rb index 6fe68f87..cae47c53 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130121221226) do +ActiveRecord::Schema.define(:version => 20130128065543) do create_table "auth_servers", :force => true do |t| t.string "short_name", :limit => 10, :null => false @@ -21,7 +21,25 @@ ActiveRecord::Schema.define(:version => 20130121221226) do t.string "secret", :limit => 64, :null => false end + create_table "campaign_translations", :force => true do |t| + t.integer "campaign_id" + t.string "locale" + t.string "progress_bar_message" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "campaign_translations", ["campaign_id"], :name => "index_campaign_translations_on_campaign_id" + add_index "campaign_translations", ["locale"], :name => "index_campaign_translations_on_locale" + create_table "campaigns", :force => true do |t| + t.integer "goal_cents" + t.integer "progress_cents" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "campaigns_old", :force => true do |t| t.integer "goal_cents", :null => false t.integer "progress_cents", :null => false t.datetime "created_at" @@ -81,6 +99,18 @@ ActiveRecord::Schema.define(:version => 20130121221226) do add_index "contributions", ["user_id"], :name => "index_contributions_on_user_id" create_table "donations", :force => true do |t| + t.integer "amount_cents" + t.boolean "processed" + t.datetime "created_at" + t.datetime "updated_at" + t.string "transaction_id" + t.string "access_token" + t.integer "campaign_id" + t.integer "outfit_features_count", :default => 0, :null => false + t.string "donor_name" + end + + create_table "donations_old", :force => true do |t| t.integer "amount_cents", :null => false t.integer "campaign_id", :null => false t.integer "user_id" @@ -123,11 +153,8 @@ ActiveRecord::Schema.define(:version => 20130121221226) do create_table "items", :force => true do |t| t.text "zones_restrict", :null => false t.text "thumbnail_url", :limit => 16777215, :null => false - t.string "name", :limit => 100, :null => false - t.text "description", :limit => 16777215, :null => false t.string "category", :limit => 50 t.string "type", :limit => 50 - t.string "rarity", :limit => 25 t.integer "rarity_index", :limit => 2 t.integer "price", :limit => 3, :null => false t.integer "weight_lbs", :limit => 2 @@ -140,7 +167,6 @@ ActiveRecord::Schema.define(:version => 20130121221226) do end add_index "items", ["last_spidered"], :name => "objects_last_spidered" - add_index "items", ["name"], :name => "name" create_table "login_cookies", :force => true do |t| t.integer "user_id", :null => false @@ -152,6 +178,14 @@ ActiveRecord::Schema.define(:version => 20130121221226) do add_index "login_cookies", ["user_id"], :name => "login_cookies_user_id" create_table "outfit_features", :force => true do |t| + t.integer "donation_id" + t.integer "outfit_id" + t.boolean "approved" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "outfit_features_old", :force => true do |t| t.integer "outfit_id", :null => false t.datetime "created_at" t.datetime "updated_at" diff --git a/vendor/cache/globalize3-0.3.0.gem b/vendor/cache/globalize3-0.3.0.gem deleted file mode 100644 index ba5beb9adfc9ed7a322b7a61250a88f6360baf6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13824 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 o13SzFhMbE3;*