【发布时间】:2014-07-06 03:42:37
【问题描述】:
我在 Rails 中对我的 PG 数据库进行原始 sql 查询。当我在 WHERE 子句中只使用一个日期条件时,效果很好,但是当我使用 2 个日期条件时,它不能按预期工作。要查看结果,我会通过结果对象对每个结果执行一次并将其打印到控制台。
只有一个条件:
connection = ActiveRecord::Base.connection()
results = connection.execute("SELECT *
FROM training_employees
LEFT JOIN trainings
ON training_employees.training_id = trainings.id
WHERE trainings.date >='2014-06-29'")
results.each do |row|
puts row
end
返回
{"id"=>"1", "employee_id"=>"2", "training_id"=>"1",
"created_at"=>"2014-06-29 06:44:13.261074",
"updated_at"=>"2014-06-29 06:44:13.261074",
"name"=>"Incendios", "date"=>"2014-06-30 02:43:00",
"expected_attendance"=>"20", "service_company_id"=>"1"}
{"id"=>"1", "employee_id"=>"3", "training_id"=>"1",
"created_at"=>"2014-06-29 06:44:13.261074",
"updated_at"=>"2014-06-29 06:44:13.261074",
"name"=>"Incendios",
"date"=>"2014-06-30 02:43:00",
"expected_attendance"=>"20", "service_company_id"=>"1"}
{"id"=>"1", "employee_id"=>"7", "training_id"=>"1",
"created_at"=>"2014-06-29 06:44:13.261074",
"updated_at"=>"2014-06-29 06:44:13.261074",
"name"=>"Incendios", "date"=>"2014-06-30 02:43:00",
"expected_attendance"=>"20", "service_company_id"=>"1"}
{"id"=>"1", "employee_id"=>"9", "training_id"=>"1",
"created_at"=>"2014-06-29 06:44:13.261074",
"updated_at"=>"2014-06-29 06:44:13.261074",
"name"=>"Incendios", "date"=>"2014-06-30 02:43:00",
"expected_attendance"=>"20", "service_company_id"=>"1"}
{"id"=>"1", "employee_id"=>"10", "training_id"=>"1",
"created_at"=>"2014-06-29 06:44:13.261074",
"updated_at"=>"2014-06-29 06:44:13.261074",
"name"=>"Incendios", "date"=>"2014-06-30 02:43:00",
"expected_attendance"=>"20", "service_company_id"=>"1"}
=> #<PG::Result:0x007fa8b9cfc038
@connection=#<PG::Connection:0x007fa8b994fcf0
@socket_io=nil, @notice_receiver=nil,
@notice_processor=nil>>
当我使用两个条件进行查询时
results = connection.execute("SELECT *
FROM training_employees
LEFT JOIN trainings
ON training_employees.training_id = trainings.id
WHERE trainings.date >='2014-06-29'
AND trainings.date <='2014-06-30'")
results.each do |row|
puts row
end
只返回这个,而不是像一个条件那样返回记录列表
=> #<PG::Result:0x007fa8b75c5398
@connection=#<PG::Connection:0x007fa8b994fcf0 @socket_io=nil,
@notice_receiver=nil, @notice_processor=nil>>
我已经单独测试了条件并返回了我期望的结果(日期范围之间存在记录)
这些是我的模型
Training(id: integer, name: string, date: datetime,
expected_attendance: integer, created_at: datetime,
updated_at: datetime, service_company_id: integer)
TrainingEmployee(id: integer, employee_id: integer,
training_id: integer, created_at:
datetime, updated_at: datetime)
我正在使用 ruby 2.1.1 和 Rails 4.1.0。
【问题讨论】:
标签: sql ruby-on-rails ruby postgresql