Подтвердить что ты не робот

Добавление дополнительных атрибутов времени выполнения для объекта activerecord

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

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

4b9b3361

Ответ 1

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

# 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 так же, как и на другие атрибуты.