Rails: Scope родительская модель по атрибуту child - PullRequest
0 голосов
/ 27 июня 2018

Мне нелегко разобраться в Rails. Вероятно, это связано с моим очень ограниченным знанием SQL, так как я хорошо знаю Rails. Я использую Rails 5.

У меня есть две модели: заявитель и заявка.

class Applicant < ApplicationRecord
  has_one :application
  has_many :skills

  accepts_nested_attributes_for :application
  accepts_nested_attributes_for :skills, 
    reject_if: ->(skill) { skill[:name].empty? || skill[:experience].empty? }

  validates_with ApplicantValidator
 end

class Application < ApplicationRecord
  belongs_to :applicant
  has_many :notes

  VALID_STATUSES = ["in review", "accepted", "declined", "closed"]

  validates_length_of   :why_interested, minimum: 25
  validates             :accept_terms, acceptance: true
  validates             :status, inclusion: { in: VALID_STATUSES }

  before_validation :set_status

  private

  def set_status
    self.status ||= "in review"
  end
end

Я хотел бы добавить область, :active, к модели «Заявитель», которая возвращает только тех кандидатов, у которых есть приложение, статус которого «находится на рассмотрении». Тем не менее, я не могу найти способ доступа к приложению в рамках области действия.

Я видел другие предложения для случаев, когда есть has_many отношения с ребенком, но они не работали в моем случае.

Я сомневаюсь, что это имеет значение, но я использую Postgres. Самое близкое к решению, которое я нашел, - добавить это, но когда я запускаю RSpec, он говорит, что для таблицы приложений должно быть предложение FROM. Я не знаю, как это сделать.

scope :active, -> { joins(:application).where('"application"."status" = "in review"') }

1 Ответ

0 голосов
/ 27 июня 2018
scope :in_review_applicants, -> { joins(:application).where('application.status = ?', :in_review) }

Я думаю, что-то подобное ..

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