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.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…