Добавление дополнительных атрибутов времени выполнения к объекту activerecord - PullRequest
14 голосов
/ 28 сентября 2011

У меня есть модель агента, которая получает свои атрибуты из базовой таблицы базы данных.Однако для одного конкретного действия контроллера я хотел бы добавить некоторые «временные» атрибуты в записи агента, прежде чем передавать их в представление.

Возможно ли это?

1 Ответ

21 голосов
/ 09 февраля 2012

Да, вы можете расширить свои модели на лету.Например:

# GET /agents
# GET /agents.xml
def index
  @agents = Agent.all

  # Here we modify the particular models in the @agents array.

  @agents.each do |agent|
    agent.class_eval do
      attr_accessor :foo
      attr_accessor :bar
    end
  end

  # And then we can then use "foo" and "bar" as extra attributes

  @agents.each do |agent|
    agent.foo = 4
    agent.bar = Time.now
  end

  respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @agents}
  end
end

В коде представления вы можете ссылаться на foo и bar, как с другими атрибутами.

...