Quand je lance cette requête ...PG :: SyntaxError: erreur dans Rails clause where avec to_date
OnlineCourseRegistration.where("exam_completed_at.strftime('%m/%d/%Y').to_date + 360 = ?", Date.today)
Je reçois cette erreur ...
2.3.0 :012 > OnlineCourseRegistration.where("exam_completed_at.strftime('%m/%d/%Y').to_date = ?", Date.today)
OnlineCourseRegistration Load (0.5ms) SELECT "class_registrations".* FROM "class_registrations" INNER JOIN "course_classes" ON "course_classes"."id" = "class_registrations"."course_class_id" INNER JOIN "courses" ON "courses"."id" = "course_classes"."course_id" INNER JOIN "users" ON "users"."id" = "class_registrations"."user_id" WHERE (course_classes.class_type = 'online') AND (exam_completed_at.strftime('%m/%d/%Y').to_date = '2017-10-16')
PG::SyntaxError: ERROR: syntax error at or near "."
LINE 1: ...line') AND (exam_completed_at.strftime('%m/%d/%Y').to_date =...
^
: SELECT "class_registrations".* FROM "class_registrations" INNER JOIN "course_classes" ON "course_classes"."id" = "class_registrations"."course_class_id" INNER JOIN "courses" ON "courses"."id" = "course_classes"."course_id" INNER JOIN "users" ON "users"."id" = "class_registrations"."user_id" WHERE (course_classes.class_type = 'online') AND (exam_completed_at.strftime('%m/%d/%Y').to_date = '2017-10-16')
ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near "."
LINE 1: ...line') AND (exam_completed_at.strftime('%m/%d/%Y').to_date =...
^
: SELECT "class_registrations".* FROM "class_registrations" INNER JOIN "course_classes" ON "course_classes"."id" = "class_registrations"."course_class_id" INNER JOIN "courses" ON "courses"."id" = "course_classes"."course_id" INNER JOIN "users" ON "users"."id" = "class_registrations"."user_id" WHERE (course_classes.class_type = 'online') AND (exam_completed_at.strftime('%m/%d/%Y').to_date = '2017-10-16')
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/connection_adapters/postgresql_adapter.rb:774:in `async_exec'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/connection_adapters/postgresql_adapter.rb:774:in `exec_no_cache'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:138:in `block in exec_query'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract_adapter.rb:435:in `block in log'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activesupport-4.0.2/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract_adapter.rb:430:in `log'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:137:in `exec_query'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/connection_adapters/postgresql_adapter.rb:891:in `select'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:24:in `select_all'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract/query_cache.rb:63:in `select_all'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/querying.rb:36:in `find_by_sql'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/relation.rb:585:in `exec_queries'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/relation.rb:471:in `load'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/relation.rb:220:in `to_a'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/relation.rb:598:in `exec_queries'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/relation.rb:471:in `load'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/relation.rb:220:in `to_a'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/activerecord-4.0.2/lib/active_record/relation.rb:573:in `inspect'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/railties-4.0.2/lib/rails/commands/console.rb:90:in `start'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/railties-4.0.2/lib/rails/commands/console.rb:9:in `start'
from /Users/marklocklear/.rvm/gems/ruby-2.3.0/gems/railties-4.0.2/lib/rails/commands.rb:62:in `<top (required)>'
from bin/rails:4:in `require'
J'ai essayé de changer les citations et des backticks, mais pas de chance.
Je ne sais pas ruby.Mais strftime est une fonction ruby et vous essayez de l'utiliser comme une fonction postgresql. –
Si vous cherchez un moyen Rails: 'OnlineCourseRegistration.where ({exam_completed_at: (Time.now.midnight - 361.day) .. (Time.now.midnight - 360.day)})' – ninjarails