Mysql 如何在rails范围内编写原始sql?

Mysql 如何在rails范围内编写原始sql?,mysql,ruby-on-rails,activerecord,Mysql,Ruby On Rails,Activerecord,这是我的范围 scope :abc, -> (start_date, end_date) { find_by_sql("select * from xys where created_at >= '#{start_date}' and created_at <= '#{end_date}'") } 上面的命令生成我可以在日志中看到的正确sql。当我在mysql中执行sql时,它会返回数据 我知道如何在select、where等帮助下编写范围 这里的问题是,我想在这个范围内

这是我的范围

scope :abc, -> (start_date, end_date) {
  find_by_sql("select * from xys where created_at >= '#{start_date}' and created_at <= '#{end_date}'")
}
上面的命令生成我可以在日志中看到的正确sql。当我在mysql中执行sql时,它会返回数据

我知道如何在select、where等帮助下编写范围


这里的问题是,我想在这个范围内编写纯sql。我该怎么写呢?

正确的方法是使用以下内容:

scope :abc, ->(start_date, end_date) {
  where("created_at >= ? AND created_at <= ?", start_date, end_date)
}
范围:abc,->(开始日期、结束日期){

在哪里("created_at>=?created_at>为什么要在范围内使用原始sql?处理原始sql的更好方法是什么?如果您真的要从模型的表中进行选择,为什么需要原始sql?如果它是多个表的联接,请使用视图。在我的例子中,我有一个Roda应用程序,它转储获取特定事务的sql语句,另一个是er(管理员,Rails应用程序)应该只显示这些事务,视图是通过活动管理员完成的,而活动管理员又希望看到一个范围。
scope :abc, ->(start_date, end_date) {
  where("created_at >= ? AND created_at <= ?", start_date, end_date)
}