我很难在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
,该模型仅返回状态为“正在审核”的申请人。但是,我找不到在范围proc中访问该应用程序的方法。
对于与孩子有has_many
关系的情况,我还看到了其他建议,但在我的情况下这些建议不起作用。
我怀疑是否会有所不同,但我使用的是Postgres。我最接近解决方案的就是添加它,但是当我运行RSpec时,它说应用程序表需要有FROM子句。我不知道该如何实现。
scope :active, -> { joins(:application).where('"application"."status" = "in review"') }
答案 0 :(得分:0)
scope :in_review_applicants, -> { joins(:application).where('application.status = ?', :in_review) }
我认为是这样。