Мне нелегко разобраться в 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"') }