Rails:通过子级属性扩展父级模型

时间:2018-06-27 18:23:46

标签: sql ruby-on-rails activerecord

我很难在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"') }

1 个答案:

答案 0 :(得分:0)

scope :in_review_applicants, -> { joins(:application).where('application.status = ?', :in_review) }

我认为是这样。