2015-09-24 142 views
0

我有兩個模型Student和StudentRecord。學生記錄有日期,結束日期和class_course_id其屬性中它屬於學生比較Rails活動記錄中的最後一個元素

scope = Student.eager_load(:student_record) 

現在,我想獲得其最新的(根據起始日期)student_record的class_course_id是一樣的給定class_course_id學生。例如:

scope = scope.where("student_records.order(start_date asc).last.class_course_id = ?", params[:class_course_id]) 

很明顯,上述說法並不正確,但我希望它能說明我想得到的結果。

回答

0

下面應該做

Student.eager_load(:student_record).where("student_records.class_course_id = ?", params[:class_course_id]).order('student_records.start_date asc').last 
+0

不,這不起作用。我認爲在它已經取得一場比賽之後,它會命令它。 – Tiamon

0

使用Order by條款和下降,以獲得最新日期.order("student_records.start_date DESC")where子句中,這些記錄將被過濾掉.where("student_records.class_course_id = ?", params[:class_course_id])where會先來,order by desc會正確排序。

scope.where("student_records.class_course_id = ?", params[:class_course_id]).order("student_records.start_date DESC") 

你可以做.limit(5)拿到第5個記錄是最新的start_dates。

+0

這沒有得到想要的結果。記錄不是最後一個記錄也被提取 – Tiamon

+0

因此,使用'.limit(1)''scope.where(「student_records.class_course_id =?」,params [:class_course_id])。order(「student_records.start_date DESC「)。limit(1)' – patrickh003

0

如果你想要所有的學生,那麼這在活動記錄中有點不平凡。

確定最後的學生記錄聽起來會從受益範圍一件重要的事情:

def self.latest_for_student 
    where("not exists (select null from student_records sr2 where sr2.student_id = student_records.student_id and sr2.start_date > student_records.start_date)") 
end 

...這意味着「返回對此有不student_records存在另一行的行爲同一student_id數據和更大的起始日期「

或者......

def self.latest_for_student 
    where("student_records.start_date = (select max(start_date) from student_records sr2 where sr2.student_id = student_records.student_id)") 
end 

...這意味着」返回行爲其起始日期是等於最高

class Student 
    has_one :last_student_record, -> {merge(StudentRecord.latest_for_student)}, :class_name => "StudentRecord" 
    has_one :last_class_course, :through => :last_student_record, :source => :class_course 
end 

class ClassCourse 
    has_many :last_records_for_student, -> {merge(StudentRecord.latest_for_student)}, :class_name => "StudentRecord" 
    has_many :students_having_as_last_course, :through => : last_records_for_student, :source => :student 
end 

那麼你應該能夠:您可以爲學生證」

然後imum開始日期

@course.students_having_as_last_course 

有點複雜......可能是語法錯誤......讓我知道如果有。

+0

仍試圖找出您的解決方案:-) – Tiamon

相關問題