объединить два активных результата записи (через таблицу соединений), чтобы вернуть новый результат - PullRequest
3 голосов
/ 22 ноября 2011

У меня есть следующее:

Account --> Options
Account --> Profiles --> Options

Вот модели

# models/account.rb
class Account < ActiveRecord::Base
  has_many :accounts_has_options
  has_many :options, :through => :accounts_has_options
  has_many :accounts_has_profiles
  has_many :profiles, :through => :accounts_has_profiles
end

# models/profile.rb
class Profile < ActiveRecord::Base
  has_many :profiles_has_options
  has_many :options, :through => :profiles_has_options
  has_many :accounts_has_options
  has_many :accounts, :through => :account_has_options
end

# models/option.rb
class Option < ActiveRecord::Base
  has_many :accounts_has_options
  has_many :accounts, :through => :accounts_has_options
  has_many :profiles_has_options
  has_many :profiles, :through => :profiles_has_options
end

Я бы хотел, чтобы все параметры были связаны с учетной записью и все параметры, связанные с помощью профилей,виртуальный атрибут.

Я нашел пример в этом вопросе: Как объединить два результата активной записи, чтобы получить новый результат, который можно дополнительно отфильтровать? Но у них было только дваЧто касается моделей, в моем случае у нас есть таблица соединений в истории.

Есть идеи, как написать такой виртуальный атрибут?

1 Ответ

0 голосов
/ 11 июня 2013

Как насчет добавления такого метода в модель вашего аккаунта

def all_options
    profile_option_ids = []
    self.profiles.map{|p| profile_option_ids = profile_option_ids + p.options.pluck("options.id")}
    Option.where("id IN (?) or id IN (?)", self.options, profile_option_ids)
end

Так что вам просто нужно позвонить

account.all_options
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...