diff --git a/db/migrate/20170525000002_fixed_twitter_ticket_article_preferences2.rb b/db/migrate/20170725000001_fixed_twitter_ticket_article_preferences3.rb similarity index 72% rename from db/migrate/20170525000002_fixed_twitter_ticket_article_preferences2.rb rename to db/migrate/20170725000001_fixed_twitter_ticket_article_preferences3.rb index 552f25966..23e21acdb 100644 --- a/db/migrate/20170525000002_fixed_twitter_ticket_article_preferences2.rb +++ b/db/migrate/20170725000001_fixed_twitter_ticket_article_preferences3.rb @@ -1,4 +1,4 @@ -class FixedTwitterTicketArticlePreferences2 < ActiveRecord::Migration +class FixedTwitterTicketArticlePreferences3 < ActiveRecord::Migration def up # return if it's a new setup @@ -6,12 +6,18 @@ class FixedTwitterTicketArticlePreferences2 < ActiveRecord::Migration # find article preferences with Twitter::NullObject and replace it with nill to prevent elasticsearch index issue article_type = Ticket::Article::Type.find_by(name: 'twitter status') - Ticket::Article.where(type_id: article_type.id).each { |article| + article_ids = Ticket::Article.where(type_id: article_type.id).pluck(:id) + article_ids.each { |article_id| + article = Ticket::Article.find(article_id) next if !article.preferences changed = false article.preferences.each { |_key, value| next if value.class != ActiveSupport::HashWithIndifferentAccess value.each { |sub_key, sub_level| + if sub_level.class == NilClass + value[sub_key] = nil + next + end if sub_level.class == Twitter::Place value[sub_key] = sub_level.attrs changed = true diff --git a/lib/tweet_base.rb b/lib/tweet_base.rb index 4d236f0be..8e67c0ac1 100644 --- a/lib/tweet_base.rb +++ b/lib/tweet_base.rb @@ -371,6 +371,10 @@ class TweetBase preferences.each { |_key, value| next if value.class != ActiveSupport::HashWithIndifferentAccess && value.class != Hash value.each { |sub_key, sub_level| + if sub_level.class == NilClass + value[sub_key] = nil + next + end if sub_level.class == Twitter::Place value[sub_key] = sub_level.attrs next