mindpin / kc_courses

MIT License
0 stars 6 forks source link

增加几个查询方法 #22

Closed fushang318 closed 8 years ago

fushang318 commented 8 years ago

增加两个 scope 查询 scope 查询用法可以参考 http://guides.ruby-china.org/active_record_querying.html#作用域

# 返回正在学习的课程(列表)
KcCourses::Course.studing_of_user(user)

# 已经学完的课程(列表)
KcCourses::Course.studied_of_user(user)
destinyd commented 8 years ago

两个方法返回的,并不是scope,而是array,不能接kaminari的page等方法。

还需改善 @hengtangan2025

destinyd commented 8 years ago

边界情况说明

  1. 传入用户为空(应该返回也是scope,只不过查询不到数据而已)
  2. 用户没有学习记录(返回也是scope,只不过查询不到数据而已)
  3. 用户正在学习课程太多(返回也是scope,支持kaminari分页,即后面接 .page)
destinyd commented 8 years ago

studing_of_user studied_of_user 方法均还存在一些问题

当传入用户为空时,查询会报错,未达到需要的效果。

KcCourses::Course.studing_of_user(nil).count
Moped::Errors::OperationFailure: The operation: #<Moped::Protocol::Command
  @length=110
  @request_id=28
  @response_to=0
  @op_code=2004
  @flags=[]
  @full_collection_name="kc_courses_dev.$cmd"
  @skip=0
  @limit=-1
  @selector={:count=>"kc_courses_courses", :query=>{"_id"=>{"$in"=>nil}}}
  @fields=nil>
failed with error 2: "$in needs an array"

KcCourses::Course.studied_of_user(nil)
 => #<Mongoid::Criteria
  selector: {"_id"=>{"$in"=>nil}}
  options:  {}
  class:    KcCourses::Course
  embedded: false>

KcCourses::Course.studing_of_user(user)
 => #<Mongoid::Criteria
  selector: {"_id"=>{"$in"=>[nil]}}
  options:  {}
  class:    KcCourses::Course
  embedded: false>

KcCourses::Course.studing_of_user(user)
 => #<Mongoid::Criteria
  selector: {"_id"=>{"$in"=>[nil, BSON::ObjectId('565588d2d4d123014e000004')]}}
  options:  {}
  class:    KcCourses::Course
  embedded: false>

可以看出当没有学习记录的时候, id的限制条件为 [nil] , 如果只是 [] 的话,会更好一些。


修复以上,分页自然没有问题

destinyd commented 8 years ago

课程列表

我手动设置课件1-1学习进度100%之后

KcCourses::Course.studing_of_user(user) 返回为空

KcCourses::Course.studied_of_user(user) 则返回此课程,这似乎与预期目标不符