Представьте себе сценарий ...
#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:
Сфера не будет работать для моего сценария. Я упростил свой сценарий, чтобы попытаться донести свою точку зрения. Как уже говорилось, мне нужен способ объединить два активных результата записи и сохранить возможность их дальнейшей фильтрации в моем контроллере.
Итак, вопрос в том, почему? Причина в том, что я пытаюсь объединить два набора записей в единую коллекцию, а одна из коллекций вообще не связана с пользователем.
Я реорганизовал приведенный выше сценарий, чтобы попытаться показать более точный пример, не усложняя его.