2016-07-18 3 views
0

быстрый вопрос. Я пытаюсь создать область без успеха. У меня есть эти моделиRails scope on association association

class User < ActiveRecord::Base 

belongs_to :store, required: true 
has_many :visits 
has_one :company, through: :store 

end 

class Store < ActiveRecord::Base 
    belongs_to :company, required: true 
    has_many :users, dependent: :nullify 
end 

class Company < ActiveRecord::Base 
    has_many :stores, dependent: :destroy 
    has_many :users, through: :stores 
end 

class Visit < ActiveRecord::Base 
    belongs_to :user 
end 

редактировать

Теперь мне нужно сделать некоторые диаграммы, используя Chartkick Gem и лучший способ, чтобы начать с посещения модели.

Я использую

Visit.group_by_day("started_at", range: 3.month.ago.midnight..Date.today.midnight, format: "%b %-e").order("day asc").count 

Если мне нужно все визиты, но теперь мне нужно также фильтровать визиты для компании, так и для магазина.

Я не могу понять, как я могу получить все посещения от пользователей, принадлежащих определенному магазину или конкретной компании.

Самый простой способ:

Visit.where("user_id IN (?)", company.users.ids) 

Это работает, но я prefear написать лучший охват и тот, что я пишу не работает.

class Visit < ActiveRecord::Base 
    belongs_to :user 

    scope :user_by_store, ->(store_id) { 
    joins(:user).where('user.store_id' => store_id) 
    } 
end 

ответ

1

Я думаю, вы должны быть в состоянии сделать:

scope :by_company, -> (company) { joins(:company).where(company: {id: company}) }