I would like to have a Dashboard to display summary of multiple models, and I implemented it using Presenter without its own data. I use an ActiveModel class (without data table):
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
By delegate, I want to be able to call Dashboard.address
and get back Account.find_by_user_id(Dashboard.user_id).address
.
If Dashboard was an ActiveRecord class, then I could have declared Dashboard#belongs_to :account
and delegate would work automatically (i.e., Account would know it should return address attribute from account with user_id
equals to user_id
in Dashboard instance).
But Dashboard is not an ActiveRecord class, so I can't declare belongs_to
. I need another way to tell Account to lookup the right record.
Is there a way to overcome this problem? (I know I can fake Dashboard to have an empty table, or I can rewrite User's instance methods to class methods that take argument. But these solutions are all hacks).
Thank you.
id
? Is that supposed to be a number? (You can'tsend("123")
, that's not a valid method name.) You can't useDashboard.user_id
withattr_accessor :user_id
, one is a class and the other is the instance... Please clarify and give examples of how you expect this to work. – Curzon