2011-04-16 51 views
1

我有一個患者模型has_many:admissions。我想爲患者模型創建一個範圍,以返回所有目前正在錄取的患者。如果患者的任何入院時間爲零,則確定患者入院。我可以在應用程序中輕鬆地完成這項工作,方法是迭代患者並檢查每個入院情況,但似乎應該讓數據庫執行此操作。我以前沒有寫過這樣的範圍。有什麼建議麼? (我使用的情況下,發展和PostgreSQL生產sqlite3的一些SQL是必要的 - 我希望這不是)如何編寫範圍以搜索嵌套模型上的屬性?

回答

2
class Patient < ActiveRecord::Base 
    has_many :admissions 

    scope :admitted, includes(:admissions).where('admissions.discharge_time' => nil) 
end 

你也可以做這樣的事情,我認爲是一個小機:

class Admission < ActiveRecord::Base 
    belongs_to :patient 

    scope :active, where(:discharge_time => nil) 
end 

class Patient < ActiveRecord::Base 
    has_many :admissions 

    def self.admitted 
    joins(:admissions) & Admission.active 
    end 
end 
+0

謝謝,這個作品非常好。我現在堅持解決相反的問題 - 任何幫助將受到歡迎。問題在http://stackoverflow.com/questions/5686101。 – brad 2011-04-16 11:18:08