能不能幫我寫以下範圍:如何用關聯編寫範圍?
Cv
belongs_to的Student
,我想寫範圍,給了我這裏的學生至少有一個 教育(student.edcuations.any?
)和學生是有效的所有CV(已全部屬性填寫)
我想爲Cv
寫這個範圍。
模型
#cv.rb
belongs_to :student
#student.rb
has_many :cvs
has_many :educations
能不能幫我寫以下範圍:如何用關聯編寫範圍?
Cv
belongs_to的Student
,我想寫範圍,給了我這裏的學生至少有一個 教育(student.edcuations.any?
)和學生是有效的所有CV(已全部屬性填寫)
我想爲Cv
寫這個範圍。
模型
#cv.rb
belongs_to :student
#student.rb
has_many :cvs
has_many :educations
我想我誤解你的車型的佈局。
我覺得它應該看起來更像是這個,因爲每個CV會教育上市(否則,如何在數據庫中的相互連接)
#cv.rb
belongs_to :student
has_many :educations
#student.rb
has_many :cvs
#education.rb
belongs_to :cvs
我可能只用一個類方法雖然。
#student.rb
def cvs_with_education
self.cvs.reject {|cv| cv.educations.empty?}
end
查看ActieRecord Query Interface Guide的第11.2.3節關於如何加入嵌套關聯。
喜歡的東西
scope :with_education, joins(:student => :educations).where("some conditions")
你可能要定義一個:valid_student
範圍,然後利用該範圍內。
valid_student是檢查每個屬性的更好方法嗎? ''範圍:with_valid_student,連接(:學生).where('名字不是空和名字不是空和電子郵件是非空(...等)')' – tomekfranek
嗯,首先,我會問自己,如果首先,數據庫中應該存在無效的學生。也許你應該向Student類添加驗證,以便只能創建有效的記錄。除此之外,答案几乎不是。 ActiveRecord'where'方法相當有限。雖然有寶石可以給你更多的權力。看看MetaWhere。 – vpsz
學生有很多教育,因爲教育包含他的部門和學院。學生可以有很多教育。我很確定。 – tomekfranek
啊,這很公平,我誤解了教育表的重點(缺乏信息)。 您是否試圖爲所有定義了一種教育的學生返回所有cvs,或者只有一名學生至少接受過一次教育的cvs? –
對於所有的學生,這就是爲什麼我想到了範圍 – tomekfranek