[英]changing an active record query from SQL query
我的SQL有點生銹,但我還是設法讓這條SQL起作用了...
Select project_id, taskType, user_id, SUM(hours)
From project_tasks, efforts
where project_tasks.id = efforts.project_task_id and project_tasks.project_id = 2 and project_tasks.taskType = "Pre-Sales"
group by user_id
我想知道的是將這個sql語句轉換為可以在ruby on rails中使用的東西。 因此,可以引用活動記錄查詢,可能沿着..
@records = Effort.find(:all,:select =>等等...
問題是我似乎無法解決如何做到這一點,因為我是剛接觸紅寶石的新手。
更新資料
class Effort < ActiveRecord::Base
belongs_to :project_task
belongs_to :project
belongs_to :user
end
class ProjectTask < ActiveRecord::Base
belongs_to :project
has_many :efforts
end
我假設您正在使用Ruby on Rails 3,因為此問題已被標記,所以語法如下:
Effort.select('project_id, taskType, user_id, SUM(hours)')
.joins(:project_task)
.where(:project_tasks => {:project_id => 2, :taskType => 'Pre-Sales'})
.group('user_id')
我的解決方案與您的sql語句的主要區別在於,這將利用JOIN而不只是兩個表之間的條件。 您還應該在列引用之前添加表前綴,以確保不會發生沖突:
.group("#{Effort.quoted_table_name}.user_id")
這未經測試,所以看看它是否如您所願。
如果要使用ActiveRecords在rails中實現sql,則可以使用scope
例如:
class Effort < ActiveRecord::Base
belongs_to :project_task
belongs_to :project
belongs_to :user
scope :all_records, lambda { |project_id, task_type
{
:select => "project_id, taskType, user_id, SUM(hours) ",
:from => "project_tasks, efforts",
:where => "project_tasks.id = efforts.project_task_id and project_tasks.project_id =#{project_id} and project_tasks.taskType = '#{task_type}'",
:group => "user_id"
}
}
end
@records = Effort.all_records(2,“售前”)
我沒有親自嘗試過,但應該可以
高溫超導
薩梅拉
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.