Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveRecord-Can';不要在语句之间使用列名_Ruby On Rails_Date_Activerecord_Ruby On Rails 5.1 - Fatal编程技术网

Ruby on rails ActiveRecord-Can';不要在语句之间使用列名

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:类型时

我有一个用户表、一个购买表和一个保费表,如果用户注册了保费服务,就会添加到这些表中。Premium表包含用户id、添加日期和删除日期。我想找到当用户是高级服务的一部分时进行的购买。我的想法是:

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
子句的版本中这样做了