【发布时间】:2011-09-15 21:52:57
【问题描述】:
想象一下场景......
#models/user.rb
class User < ActiveRecord::Base
has_many :accounts, :conditions => { :active => 1 }
end
#models/account.rb
class Account < ActiveRecord::Base
belongs_to :user
def public_accounts
Account.all :conditions => { public => true }
end
end
现在想象一下,我想将 User(:id).accounts 与 Account.public_accounts 连接起来,以显示用户可用的所有帐户的列表。
所以您认为我可以将 User 模型更新为如下所示。
#models/user.rb
class User < ActiveRecord::Base
has_many :accounts, :conditions => { :active => 1 }
def all_accounts
self.accounts + Account.public
end
end
但是,现在我将无法使用 all() 方法,因为它不再属于那种类型的对象。
在控制器中我想这样做...
#controllers/accounts_controller.rb
def search_all
User.find(params[:user_id]).all_accounts.all(
:offset => params[:offset],
:limit => params[:limit]
)
end
想法?
更新#1: 范围不适用于我的场景。我简化了我的场景以试图表达我的观点。如前所述,我需要一种方法来组合两个活动记录结果并保留在我的控制器中进一步过滤它们的能力。
所以问题是,“为什么?”原因是,我试图将两组记录组合成一个完整的集合,其中一个集合根本与用户无关。
我已经重构了上面的场景,试图展示一个更精确的例子,而不会变得过于复杂。
【问题讨论】:
-
你添加的方法是
all_accounts,为什么不能使用all? -
KandadaBoggu,试试看。它不起作用。
标签: ruby-on-rails ruby ruby-on-rails-3 activerecord model