【发布时间】:2011-11-24 03:07:06
【问题描述】:
我想要一个仪表板来显示多个模型的摘要,我使用 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 并且委托将自动工作(即,帐户会知道它应该从帐户返回地址属性,user_id 在 Dashboard 实例中等于 to user_id)。
但是 Dashboard 不是 ActiveRecord 类,所以我不能声明 belongs_to。我需要另一种方法来告诉 Account 查找正确的记录。
有没有办法解决这个问题? (我知道我可以伪造 Dashboard 以获得一个空表,或者我可以将 User 的实例方法重写为带参数的类方法。但这些解决方案都是 hack)。
谢谢。
【问题讨论】:
-
这没有多大意义。
id是什么?应该是数字吗? (你不能send("123"),那不是一个有效的方法名。)你不能将Dashboard.user_id与attr_accessor :user_id一起使用,一个是类,另一个是实例......请澄清并举例说明如何你希望这能奏效。 -
嗨,安迪,我可能不够清楚。请注意,这不是常规的 ActiveRecord::Base 类。因此,我需要一个属性来保存 current_user 的 id。 (虽然我不想永久保留这个 ID)。通过委托,我希望能够调用 Dashboard.address 并取回 Account.find_by_user_id(Dashboard.user_id).address。我试图将此函数委托给 Account 类,但我需要以某种方式将 user_id 值传递给 Account,以便它知道应该使用哪个帐户实例。
标签: ruby-on-rails model-view-controller activemodel presenter