From 700f271a361b0390828d22d8d68bb8d40b0934d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sen=C3=A9n=20Rodero=20Rodr=C3=ADguez?= Date: Thu, 24 Jan 2019 13:52:40 +0100 Subject: [PATCH] Remove milestone overrided translation class Since Globalize gem update to v5.2.0 we cannot override translations anymore in the same way that before the update. Milestone::Translation class removed in this commit were no longer loaded correctly when translation class is retrieved by translation_class method provided by Globalize. Here is the diff between both gem versions: https://github.com/globalize/globalize/compare/v5.0.0...v5.2.0#diff-a1370b109e0dd567545b072bc6447b8fR51 This problem is not happening on test environment but is throwing an exception in other environments as it has not loaded the delegation definition inside our custom translation class. To fix this we added a new class method inside globalizable model concern to allow to define method delegation on translations classes from parent globalizable classes when needed without having to override Translation classes. Another way to properly load our custom Milestone::Translation class is to place it inside parent model class, like the example below: class Milestone ... class Translation delegate :status_id, to: :globalized_model end end Or maybe monkey patching translation_class method from globalize gem to make it find our custom translation class. I don't like this option. --- app/models/concerns/globalizable.rb | 4 ++++ app/models/milestone.rb | 1 + app/models/milestone/translation.rb | 3 --- 3 files changed, 5 insertions(+), 3 deletions(-) delete mode 100644 app/models/milestone/translation.rb diff --git a/app/models/concerns/globalizable.rb b/app/models/concerns/globalizable.rb index e8772f19c..2e8d3b935 100644 --- a/app/models/concerns/globalizable.rb +++ b/app/models/concerns/globalizable.rb @@ -19,5 +19,9 @@ module Globalizable validates(method, options.merge(if: lambda { |resource| resource.translations.blank? })) translation_class.instance_eval { validates method, options } end + + def translation_class_delegate(method) + translation_class.instance_eval { delegate method, to: :globalized_model } + end end end diff --git a/app/models/milestone.rb b/app/models/milestone.rb index d4ef41137..124e05870 100644 --- a/app/models/milestone.rb +++ b/app/models/milestone.rb @@ -7,6 +7,7 @@ class Milestone < ActiveRecord::Base translates :title, :description, touch: true include Globalizable + translation_class_delegate :status_id belongs_to :milestoneable, polymorphic: true belongs_to :status diff --git a/app/models/milestone/translation.rb b/app/models/milestone/translation.rb deleted file mode 100644 index e1b589d96..000000000 --- a/app/models/milestone/translation.rb +++ /dev/null @@ -1,3 +0,0 @@ -class Milestone::Translation < Globalize::ActiveRecord::Translation - delegate :status_id, to: :globalized_model -end