Найдите модель с помощью ассоциаций

#ruby-on-rails #ruby-on-rails-3 #activerecord #associations

#ruby-on-rails #ruby-on-rails-3 #activerecord #ассоциации

Вопрос:

В настоящее время у меня есть следующие три модели:

 class Vacancy < ActiveRecord::Base
  # Database Associations
  has_many :vacancy_occupations, :foreign_key => :vacancy_id
  has_many :occupations, :through => :vacancy_occupations
  belongs_to :country
  belongs_to :employer

  # Database Validations
  validates_presence_of :name, :title, :description
end

class VacancyOccupation < ActiveRecord::Base
  belongs_to :vacancy, :foreign_key => :vacancy_id
  belongs_to :occupation, :foreign_key => :concept_id
end

class Occupation < Concept
end

class Concept < ActiveRecord::Base
  # Database Associations
  has_many :labels
  has_many :vacancy_occupations, :foreign_key => :concept_id
  has_many :cv_occupations, :foreign_key => :concept_id
  has_many :vacancies, :through => :vacancy_occupations
  has_many :cvs, :through => :cv_occupations

  # Database Validations
  validates_presence_of :uri
  validates_uniqueness_of :uri
end
  

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

 @vacancies = Vacancy.joins(:vacancy_occupations).where('vacancy_occupations.concept_id' => occupation_ids).uniq
  

Но мне было интересно, есть ли более чистый синтаксис, чтобы это сделать? Играл с включаемыми параметрами и пробовал использовать разные модели в качестве отправной точки, но, похоже, я безнадежно заблудился.

Ответ №1:

вы можете использовать области для получения более чистого синтаксиса

Ответ №2:

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

 Occupation.all.vacancies
  

Комментарии:

1. В итоге у меня остались бы только все вакансии, связанные с профессией, тогда как я просто хочу, чтобы были связаны вакансии с определенной профессией.

2. профессия = Occupation.find(…) затем, профессия.вакансии