Ruby on rails ActiveRecord-Can';不要在语句之间使用列名
我有一个用户表、一个购买表和一个保费表,如果用户注册了保费服务,就会添加到这些表中。Premium表包含用户id、添加日期和删除日期。我想找到当用户是高级服务的一部分时进行的购买。我的想法是:Ruby on rails ActiveRecord-Can';不要在语句之间使用列名,ruby-on-rails,date,activerecord,ruby-on-rails-5.1,Ruby On Rails,Date,Activerecord,Ruby On Rails 5.1,我有一个用户表、一个购买表和一个保费表,如果用户注册了保费服务,就会添加到这些表中。Premium表包含用户id、添加日期和删除日期。我想找到当用户是高级服务的一部分时进行的购买。我的想法是: Purchase.joins(用户::保费)。其中(“Purchase.date在?和之间?”、“保费.添加日期”、“保费.删除日期”) 当我尝试此版本时,我收到以下错误: ActiveRecord::StatementInvalid:PG::InvalidDatetimeFormat:ERROR:类型时
Purchase.joins(用户::保费)。其中(“Purchase.date在?和之间?”、“保费.添加日期”、“保费.删除日期”)
当我尝试此版本时,我收到以下错误:
ActiveRecord::StatementInvalid:PG::InvalidDatetimeFormat:ERROR:类型时间戳的输入语法无效:“Premium.add\u date”
如果我将其拆分为两个。其中语句,则效果良好:
Purchase.joins(用户::premium)。其中(“purchases.date>=premium.add_date”)。其中(“purchases.date问题在于Postgres正在尝试清理/引用绑定值,但实际上您正在引用另一个表中的现有列。使用?
占位符语法用于文本,而不是引用现有列
将插入到?
的查询占位符中的命名列(因此不绑定值)内联时会发生什么情况
因此,不是:
Purchase.joins(user: :premiums)
.where("purchases.date BETWEEN ? AND ?", "premiums.add_date", "premiums.remove_date")
试一试
您已经在使用两个where
子句的版本中执行了此操作。问题是Postgres正在尝试清理/引用绑定值,但实际上您正在引用另一个表中的现有列。使用?
占位符语法用于文本,而不是引用现有列
将插入到?
的查询占位符中的命名列(因此不绑定值)内联时会发生什么情况
因此,不是:
Purchase.joins(user: :premiums)
.where("purchases.date BETWEEN ? AND ?", "premiums.add_date", "premiums.remove_date")
试一试
您已经在使用两个where
子句的版本中这样做了