Ruby on rails Rails 5范围问题
在使用Postgresql的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控
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?}