Я не уверен, что предлагаемый ответ действительно даст вам ожидаемые результаты.
Скажем, у вас есть
class Post < ActiveRecord::Base
translates :name
end
Если экземпляр пост:
p = Post.last
проверить свое название:
p.name
=> "My old name"
и изменить имя:
p.name = "My new name"
Если вы:
p.name_changed?
вы получите сообщение об ошибке не метод.
Если, как вы предлагаете, вы вызываете класс перевода внутри модели:
class Post < ActiveRecord::Base
translates :name
.......
# Open the Translation class
class Translation
after_save do #you may define a private method as callback method
if name_changed?
#accomplish your tasks...
end
end
end
end
Вы сможете узнать, если ваш атрибут изменен только после того, как вы сохранили основную переводимую запись. Возможно, это не то, что вы хотите (представьте, например, что вы хотите создать новый пул, основанный на новом имени сообщения каждый раз, когда он изменится, вам придется сохранить свой пост второй раз).
Вместо вызова класса внутри метода, вы можете попробовать (перед сохранением должности): с
p.translation.name_changed?
=> false
Результат будет ложным. Это можно объяснить. Если после изменения имени с:
p.name = "My new name"
=> "My new name"
p.translation.name вернется:
p.translation.name
=> "My old name"
Это потому, что глобализацию хранит переведенные атрибуты в виртуальных атрибутах реализованным переводимой модели.
Вы можете сделать:
p.translation.name = "My new name"
=> "My new name"
затем:
p.translation.name_changed?
=> true
Однако, вы теряете часть выгоды от использования глобализации.
Что я делаю, что в модели Post, я переопределить геттер и сеттер для виртуального атрибута Я заинтересован в:
def name
translation.name
end
def name=(val)
translation.name = val
end
Теперь, если я:
p.name
=> "My old name"
p.name = "My new name"
=> "My new name"
p.name_changed?
# no method error
p.translation.name_changed?
=> true
p.translation.name
=> "My new name"
и это, прежде чем сохранить сообщение.
более подробно объясните, когда он изменится по той же просьбе или может быть изменен час назад? – matanco
определенно по тому же запросу – Muntasim