Ruby on rails 尝试在rails 3中使用activerecord创建子查询

Ruby on rails 尝试在rails 3中使用activerecord创建子查询,ruby-on-rails,ruby-on-rails-3,sqlite,activerecord,Ruby On Rails,Ruby On Rails 3,Sqlite,Activerecord,我对rails很陌生。谢谢你看这个。我试图在activerecord中创建一个子查询。这是我的控制器里的东西 @vote_time = Submission.select("submissions.updated_at").where(:chosen => true).first @submissions = Submission.where(["submissions.created_at > ?", @vote_time]) 我认为这大概就是sql中的情况 selec

我对rails很陌生。谢谢你看这个。我试图在activerecord中创建一个子查询。这是我的控制器里的东西

 @vote_time = Submission.select("submissions.updated_at").where(:chosen => true).first
 @submissions = Submission.where(["submissions.created_at > ?",  @vote_time])  
我认为这大概就是sql中的情况

select * from submissions where submissions.created_at < (select submissions.updated_at from submissions where chosen = true limit 1)
每当我运行activerecord搜索时,@vote_time被插入为null。我是不是找错人了?不能将变量传递到数组条件中吗?非常感谢您抽出时间。

您希望调用返回的第一个对象的updated_at属性,而不是尝试仅选择该列。因此:

@vote_time = Submission.where(:chosen => true).first.updated_at
@submissions = Submission.where(["submissions.created_at > ?",  @vote_time])

您正在呼叫first,它将返回第一次提交。如果得到nil,则第一个查询不会返回任何提交。当执行select时,它不会返回该列的值,它将返回一个提交实例,其中只填充了更新的_at属性。如果数据库中有任何符合条件的记录,您应该能够使用@vote_time.updated_at访问日期。非常感谢。就这样。我不能告诉你我有多感激你。