Ruby on Rails self.joins或self.where不起作用?

Fel*_*lix 2 ruby ruby-on-rails ruby-on-rails-4

我的实际代码看起来像这样

user_lesson = self.where("worked = ? AND passed = ?", true, false).order("lessons.sort")
Run Code Online (Sandbox Code Playgroud)

但它不起作用......错误是:

undefined method `where' for #<Membership:0x000000059f22e8>
Run Code Online (Sandbox Code Playgroud)

..我试过这样的方式:

user_lesson = Membership.joins("user_lessons").where("id = ? AND worked = ? AND passed = ?",self.id, true, false).order("lessons.sort")
Run Code Online (Sandbox Code Playgroud)

但后来我收到了这个错误:

Unknown table 'memberships': SELECT `memberships`.*
FROM `memberships` user_lessons
WHERE (id = 4 AND worked = 1 AND passed = 0)
ORDER BY lessons.sort
Run Code Online (Sandbox Code Playgroud)

它应该如何正确?

原始查询

user_lesson = self.user_lessons.find :first,
  :include => [:lesson],
  :conditions => ["worked = ? AND passed = ?", true, false],
  :order => "lessons.sort"
Run Code Online (Sandbox Code Playgroud)

neu*_*aut 6

这是因为该where方法是在类级别而不是实例级别定义的.在你的第二个例子中(你正在做的事情Membership.joins)你通过调用joinswhereMembership类而不是在该类的实例上做正确的事情.您在第二个示例中出错的原因可能是因为您需要运行迁移来创建成员资格表(如果您没有迁移,则需要创建一个).