我有以下两种模式:
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
问题在于我获得了一个数组而不是一个关系,这限制了我链接其他范围。
任何干净整洁的解决方案?谢谢!
答案 0 :(得分:1)
试试这个:
scope :with_archive, -> { joins(:archive) }
这应仅返回包含档案的人员,因为joins
使用INNER JOIN
语句。