Да, это «проблема» с классом кэширования рельсов. В производстве класс загружается, а затем кэшируется, поскольку условие оценивается в контексте класса, это должно быть значение I18n.locale, когда класс был загружен.
Чтобы решить проблему, вы можете просто отключить ее, установив
config.cache_classes = false
в вашем config / enviroments / production.yml, но это замедляет время отклика.
Лучшим решением было бы использовать лямбду и передать в локаль
named_scope :public, lambda {|l|
if l == :de or l == 'de'
{:conditions => ["published=? AND trash=?", true, false]}
else
{:conditions => ["published_#{l} =? AND trash=?", true, false]}
end
}
Тогда вы можете использовать это так:
Article.public(I18n.locale)