0

我做下面的查詢:ActiveRecord的 - 如何加入協會與純SQL查詢

TaskCheck.find_by_sql ["SELECT task_checks.*, tasks.* FROM task_checks INNER JOIN tasks ON task_checks.task_id = tasks.id"] 

它返回TaskCheck對象,但是當我嘗試讀取任務字段(在查詢中加入了),那麼ActiveRecord的呢爲每個對象單獨選擇查詢。即使我加入它,它也會延遲加載我的關聯。我如何解決這個問題?

PS:我想使用純SQL。原因是因爲AR「包含」方法執行第二個SELECT關聯,這對於一對一關聯是不利的,並且我想要最佳的性能。

+0

這很簡單,如果你不使用純SQL。爲什麼使用純SQL? – 2013-04-26 21:22:28

+1

因爲系統的這部分將每天執行一千次,我希望可能的最佳性能。 – Jirico 2013-04-29 12:36:09

+0

我記得現在,主要原因是因爲AR「includes」方法爲關聯做了單獨的SELECT。對於Rails和一對多關聯來說,這是一個很好的方法,但在一對一關聯中不起作用。 – Jirico 2013-04-29 12:43:30

回答

0

有一種方法,其中u可以指定你想要的列,就像這樣:

sql = "SELECT task_checks.*, tasks.* FROM task_checks INNER JOIN tasks ON task_checks.task_id = tasks.id" 
records_array = ActiveRecord::Base.connection.execute(sql) 

然後,records_array將包含在選擇查詢與指定的列的所有返回行。