Если вы хотите представить название задания по-разному, тогда лучшее место для этого - помощник.Это держит логику представления вне вашей модели.Ваш вспомогательный код будет эквивалентен вашему is_view?
коду.
По общему признанию, это означает, что вам нужно звонить каждый раз, когда вы отображаете название работы, вероятно, то, что вы пытаетесь избежать.Вы можете создать класс делегатора, который вы используете для людей в своих представлениях.Вам все равно нужно помнить о создании делегированных версий людей, хотя, когда вы передаете их своим представлениям.
Примерно так, например:
class HumanView < SimpleDelegator
def job
unchanged_job = super # The actual saved job string
key = unchanged.gsub(/ /,'_')
translation = I18n.translate("jobs.#{key.downcase}")
if translation.include?('translation missing:')
unchanged_job
else
translation
end
end
end
Тогда в контроллере вы можетеdo:
def index
humans = Human.find(:all) # For example
@humans = humans.map { |h| HumanView.new(h) }
end
def show
h = Human.find(params[:id])
@human = HumanView.new(h)
end
SimpleDelegator
- это стандартный класс ruby, который просто делегирует любые вызовы метода «обернутому» объекту, если класс делегата не определяет метод.