Ruby on rails Ruby on Rails self.joins或self.where不';不行?

Ruby on rails Ruby on Rails self.joins或self.where不';不行?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我的实际代码如下所示 user_lesson = self.where("worked = ? AND passed = ?", true, false).order("lessons.sort") 但它不起作用。。。错误是: undefined method `where' for #<Membership:0x000000059f22e8> 但后来我犯了一个错误: Unknown table 'memberships': SELECT `memberships`.* FROM

我的实际代码如下所示

user_lesson = self.where("worked = ? AND passed = ?", true, false).order("lessons.sort")
但它不起作用。。。错误是:

undefined method `where' for #<Membership:0x000000059f22e8>
但后来我犯了一个错误:

Unknown table 'memberships': SELECT `memberships`.*
FROM `memberships` user_lessons
WHERE (id = 4 AND worked = 1 AND passed = 0)
ORDER BY lessons.sort
它应该是什么样子

原始查询

user_lesson = self.user_lessons.find :first,
  :include => [:lesson],
  :conditions => ["worked = ? AND passed = ?", true, false],
  :order => "lessons.sort"

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

稍微扩展:模型实例正好是数据库中的一行,这就是使用
Membership.find(42)
时得到的结果。在行上运行
。其中
没有意义。这就是为什么它需要在模型类(
Membership.where(…)
)或行集合(这是
.where()
返回的内容)上启用的原因。这看起来是一个合适的解决方案吗?如果您需要在类上调用where,同时让其实例
self.class.where(..
可以工作,但是您应该尝试操作作用域和关系,因为我已经添加了原始查询,因为我已经完成了转换。
self.class.where
不起作用
user_lesson = self.user_lessons.find :first,
  :include => [:lesson],
  :conditions => ["worked = ? AND passed = ?", true, false],
  :order => "lessons.sort"