Как передать аргумент методу делегата в Rails

Я хотел бы иметь Dashboard для отображения сводки по нескольким моделям, и я реализовал его с помощью Presenter без собственных данных. Я использую класс ActiveModel (без таблицы данных):

class Dashboard
  attr_accessor :user_id
  def initialize(id)
    self.user_id = id
  end

  delegate :username, :password, :to => :user 
  delegate :address,  :to => :account
  delegate :friends,   :to => :friendship

end 

По делегату, я хочу иметь возможность вызвать Dashboard.address и получить обратно Account.find_by_user_id (Dashboard.user_id) .address .

Если бы Dashboard был классом ActiveRecord, то я мог бы объявить Dashboard # own_to: account , и делегат работал бы автоматически (т. Е. Account будет знать, что он должен возвращать атрибут адреса из учетной записи с user_id равно user_id в экземпляре Dashboard).

Но Dashboard не является классом ActiveRecord, поэтому я не могу объявить own_to . Мне нужен другой способ указать учетной записи для поиска нужной записи.

Есть ли способ решить эту проблему? (Я знаю, что могу подделать Dashboard, чтобы иметь пустую таблицу, или я могу переписать методы экземпляра User в методы класса, принимающие аргументы. Но все эти решения - взломы).

Спасибо.

13
задан Benoit Garret 24 September 2011 в 14:18
поделиться