[英]Rails. Why should i use ActiveRecord?
我試圖做簡單的SQL查詢任務。 所以我使用活動記錄和SQLite為我的開發環境使用PostgreSQL作為我的產品。 ENV。
我認為使用ActiveRecord是因為它可以根據所使用的數據庫生成查詢,但我的所有查詢都有一些PostgreSQL錯誤。
查詢:
@sql[0] = Task.select(:done, :deadline).order(name: :asc).distinct
@sql[1] = Task.joins(:project).group(:project_id).select("projects.name,
COUNT(*) as TaskCount").order("TaskCount DESC")
@sql[2] = Task.joins(:project).group(:project_id).select("projects.name,
COUNT(*) as TaskCount").order("projects.name ASC")
@sql[3] = Task.select("projects.name AS pName","tasks.*")
.joins(:project).where("projects.name LIKE ?",'N%')
.where("projects.name LIKE ?","%_a_%")'
@sql[4] = Project.joins("LEFT OUTER JOIN tasks
ON 'projects'.'id'='tasks'.'project_id'")
.group(:project_id)
.select("projects.*, COUNT(tasks.project_id) as TaskCount")
.where("projects.name LIKE ?","%_a_%")
@sql[5] = Task.group(:name).having("COUNT(*)>1").order(name: :asc)
@sql[6] = Task.joins(:project).where("projects.name = 'Garage'")
.group("tasks.name, tasks.done, tasks.deadline")
.having("COUNT(*)>1").select("tasks.*, COUNT(*)").order("COUNT(*) DESC")
@sql[7] = Task.where("tasks.done = ?",true).joins(:project).group(:project_id)
.having("COUNT(*)>=10").select("projects.name, COUNT(*) as TaskCount")
.order("projects.id DESC")
他們每個人都有一些錯誤。
我不指望你解決它們 。
這可能值得一個合適的答案。
我的問題我如何首先避開它們?
首先要做的事情 - 保留postgres導軌指南的副本。 這將涵蓋大多數基地。 你通常會在野外遇到它們 - 像這樣的例子比比皆是。 所以在指出正確方向方面做得非常好。
我應該使用PostgreSQL進行開發嗎?
絕對。 Heroku 把它釘在頭上 :
應用程序的開發與其在生產中的執行之間的任何差異都可能導致微小的不兼容性,從而導致在開發或暫存中工作的代碼在生產中失敗。 例如,避免在開發和生產之間使用不同的服務,即使適配器理論上抽象出服務中的任何差異。 在本地使用SQLite和在生產中使用PostgreSQL; 或者用於開發中的緩存和生產中的Memcached的本地進程內存,起初可能看起來無害,但可能是各種生產問題的原因。
更多閱讀這篇SO帖子
哦,並且:
問:活動記錄的目的是什么呢? 我可以寫純粹的查詢嗎? 因為它似乎是一個更好的選擇。 (也許我錯了?)
人們對這一論點的雙方都存在爭議。 有人說我們完全放棄ORM,因為它是反模式 。 你會在這個問題的兩邊找到堅定的支持者。
我們所知道的是,它是一個有用的工具,應該與關於SQL吐出的大量潛在知識一起使用。 它當然很方便,但如果您發現執行不正確的查詢或者某些事情沒有按預期工作,請准備好卷起袖子 - 您總是可以在需要時編寫純SQL 。 干杯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.