如何使用belongs_to对象编写范围?

tom*_*nek 9 ruby-on-rails scopes ruby-on-rails-3 rails-activerecord

我有以下型号

楷模

Job
  belongs_to :company
Company
  has_many :jobs
Run Code Online (Sandbox Code Playgroud)

现在我使用以下方法选择所有Jobs 已接受Company的:

def self.with_accepted_company
  Job.all.reject {|job| job.company.state != "accepted" }
end
Run Code Online (Sandbox Code Playgroud)

但是我想使用范围并将其与其他范围一起使用.是否可以在Job模型中编写该范围?

sha*_*yed 20

我会做这样的事情(来自http://guides.rubyonrails.org/active_record_querying.html)

class Job
  scope :accepted_with_active_company, ->() {
    joins(:company).where('companies.state' => "accepted") 
  }
end
Run Code Online (Sandbox Code Playgroud)

  • 错误消息告诉您,您没有名为 :companies 的关联。原始代码假设它是一个 `has_many` 关系,但实际上它是 `belongs_to` 你应该做的是使用 joins(:company) 而不是 joins(:company)。我已经编辑了答案以反映这一点 (3认同)