Попробуйте расширить объект как модель представления.Это действительно распространено в ASP.NET MVC, когда вы хотите расширить объект домена с помощью вещей, которые не имеют ничего общего с бизнес-доменом.
class User < ActiveRecord::Base
# id, integer
# first_name, string
# last_name, string
# only put the business-y stuff here. validations, etc.
end
class ShowUserViewModel < User
def background_color
"#0000ff"
end
def template
"show"
end
end
class EditUserViewModel < User
def background_color
"#00ff00"
end
def template
"show_modify"
end
end
От вашего контроллера, в зависимости от предпринятых действий, вернутьсоответствующий объект.Модели представления по-прежнему являются «пользователями», но они дополняются дополнительной информацией, необходимой для представления.Это действительно может держать множество структур if
и for
вне поля зрения.