у меня 3 модели
class User < ActiveRecord::Base
has_many :profiles
has_many :companies, :through => :profiles
end
class Company < ActiveRecord::Base
has_many :profiles
has_many :users, :through => :profiles
end
class Profile < ActiveRecord::Base
belongs_to :company
belongs_to :user
end
когда я хочу отправить запрос всем компаниям. Я просто набираю
u = User.find(:first)
companies = u.companies
Но когда я хочу запрашивать только компании, которые имеют
profile.is_publish == ture
Как правильно мне поступить
Первое: Я должен создать метод в User, чтобы сделать это
def published_companies
companies.where('profiles.is_publish' => true)
end
companies = u.published_companies
Второе: Я должен создать область действия в Компании
scope :published, joins(:profiles).where('profiles.is_publish' => true)
companies = u.companies.published
Третье: Я должен создать область в Профиле
companies = u.profile.published.companies
первый способ легкий, а третий крутой, но я не знаю, как это сделать.