Rails 4 - 使用has_one而不是属性的范围

时间:2014-04-24 09:44:33

标签: ruby-on-rails ruby-on-rails-4

我有以下两种模式:

class Person < ActiveRecord::Base
  has_one :archive, :dependent => :destroy

class Archive < ActiveRecord::Base
  belongs_to :person

Archive持有person_id

我需要有一个范围Person.with_archive。由于Person没有archive_id的db列,我找到的唯一解决方案是:

def self.has_archive
  res = Array.new
  self.all.each do |i|
    res << i if !i.archive.nil?
  end
  res
end

问题在于我获得了一个数组而不是一个关系,这限制了我链接其他范围。

任何干净整洁的解决方案?谢谢!

1 个答案:

答案 0 :(得分:1)

试试这个:

scope :with_archive, -> { joins(:archive) }

这应仅返回包含档案的人员,因为joins使用INNER JOIN语句。