Я хотел бы иметь панель инструментов для отображения сводки нескольких моделей, и я реализовал ее с помощью 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#belongs_to :account
, и делегат работал бы автоматически (т. е. Account знал бы, что он должен вернуть атрибут адреса из аккаунта с user_id
равным to user_id
в экземпляре Dashboard).
Но Dashboard не является классом ActiveRecord, поэтому я не могу объявить belongs_to
. Мне нужен другой способ указать учетной записи, что нужно искать нужную запись.
Есть ли способ преодолеть эту проблему? (Я знаю, что могу подделать Dashboard, чтобы иметь пустую таблицу, или я могу переписать методы экземпляра пользователя в методы класса, которые принимают аргументы. Но все эти решения — хаки).
Спасибо.
id
? Это должно быть число? (Вы не можетеsend("123")
, это недопустимое имя метода.) Вы не можете использоватьDashboard.user_id
сattr_accessor :user_id
, один из них является классом, а другой - экземпляром... Пожалуйста, поясните и приведите примеры того, как вы ожидаете, что это будет работать. - person Andrew Vit   schedule 24.09.2011