Ruby on rails Rails 5范围问题

Ruby on rails Rails 5范围问题,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,在使用Postgresql的rails 5中,我编写了一个范围,用于按日期选择状态项。我的模型是: class Status < ApplicationRecord scope :in_month, ->(date){where("status_date = ?", date) if date.present?} end 注意,出于某种原因,它试图访问表“status”,而不是“status” 我到底做错了什么?这是非常直接的铁路指南 编辑和“修复” 哼。。。显然,Rails控

在使用Postgresql的rails 5中,我编写了一个范围,用于按日期选择状态项。我的模型是:

class Status < ApplicationRecord
  scope :in_month, ->(date){where("status_date = ?", date) if date.present?}
end
注意,出于某种原因,它试图访问表“status”,而不是“status”

我到底做错了什么?这是非常直接的铁路指南

编辑和“修复”

哼。。。显然,Rails控制台的状态不好。在下面的注释之后,我重新启动了控制台,发现我的查询工作得非常好。请注意,WHERE子句的这种格式需要引号,
status
status
的正确复数形式

重新启动后,praga2050描述的
where(status\u date:date)
格式起作用,Kedarnag Mukanahallipatna建议的
where(“status.status\u date=?”,date)
格式也起作用


经验教训:
重新加载不重新加载模型中的更改;必须重新启动控制台才能识别模型更改。请看下面的答案:

我不知道为什么要将字符串放在Where子句中

scope :in_month, ->(date){where("status_date = ?", date) if date.present?}
应该像下面这样改变

下面的一个应该适合你

scope :in_month, ->(date){where(status_date: date) if date.present?}

我认为您没有抓住rails中命名约定的要点

模型类名为单数,将自动映射到复数数据库表名

据此,您可以将模型名称更改为
状态

或设置要在rails模型中使用的表名:

类状态(日期){where(status\u date:date)if date.present?}
结束

这就是整个
状态
类吗?
ApplicationRecord
中发生了什么?该作用域根本不应该添加任何表前缀。您可以尝试
作用域:in_month,->(date){where(“
statuses
.status\u date=?”,date)if date.present?}
确保将
statuses
括在“`@KedarnagMukanahallipatna”中-您的示例中有额外的空间,但是对于这个修复,它也可以工作——请参阅我的编辑。字符串格式在RubyonRails指南()第14.2节中有明确的描述。你的方法是另一种方法,失败的原因是同样的错误。。“statuses”是“status”的复数形式,您可以看到Rails正确地认识到,作为SQL语句的第一部分,它是
选择“statuses”。*从“statuses”中选择…
。在WHERE子句中,多元化失败了。
scope :in_month, ->(date){where(status_date: date) if date.present?}