Сначала убедитесь, у вас есть настройка отношений следующим образом:
class Ad < ActiveRecord::Base
belongs_to :ad_group, inverse_of: :ads
end
class AdGroup < ActiveRecord::Base
belongs_to :campaign, inverse_of: :ad_groups
has_many :ads, inverse_of :ad_group
end
class Campaign < ActiveRecord::Base
belongs_to :client, inverse_of: :campaigns
has_many :ad_groups, inverse_of :campaign
end
class Client < ActiveRecord::Base
has_many :campaigns, inverse_of :client
end
Использование соединений и срывать, если все, что вы хотите является идентификатором клиента и эффективным SQL:
Client.joins(campaigns: {ad_groups: :ad}).where(
ads: { id: some_id }).pluck('clients.id').first
Если вам нужен весь клиент и эффективный SQL, то просто:
Client.joins(campaigns: {ad_groups: :ad}).where(ads: { id: some_id }).first
client_id = ad.adgroup.campaign.client.client_id? – Bjoernsen