Rails。なぜActiveRecordを使用する必要があるのですか?

Ihor Tsykalo

私は単純なSQLクエリタスクを作成しようとしていました。そのため、開発環境にはアクティブレコードとSQ​​Liteを使用し、製品にはPostgreSQLを使用しました。環境

使用するDBに応じてクエリを生成できるため、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")

それらのすべてにいくつかのエラーがあります。

私はあなたがそれらを解決することを期待していません

  • 私の質問は、そもそもそれらをどのように回避するのでしょうか?
  • 開発にもPostgreSQLを使用する必要がありますか?
  • では、アクティブレコードの目的は何ですか?純粋なクエリを書くことはできますか?それはより良い選択のように思われるからです。(たぶん私は間違っていますか?)
マックスアルカラ

これはおそらく適切な答えに値します。

私の質問は、そもそもそれらをどのように回避するのでしょうか?

まず最初に-postgres用のレールガイドのコピーを手元に置いておきますそれはほとんどの拠点をカバーします。あなたは通常、野生でそれらに遭遇するでしょう-これらのような例はたくさんあります。SOはあなたを正しい方向に向けるのに非常に良い仕事をします。

開発にもPostgreSQLを使用する必要がありますか?

絶対に。Herokuはそれを頭に釘付けにします

アプリケーションの開発と本番環境での実行の間に相違があると、小さな非互換性が発生し、開発またはステージングで機能したコードが本番環境で失敗する可能性があります。たとえば、アダプタが理論的にサービスの違いを抽象化する場合でも、開発と本番の間で異なるサービスを使用することは避けてください。ローカルでSQLiteを使用し、本番環境でPostgreSQLを使用します。または、開発時のキャッシュと本番環境でのMemcached用のローカルプロセスメモリは、最初は無害に見えるかもしれませんが、さまざまな本番環境の問題の原因となる可能性があります。

このSO投稿からもっと読む

ああ、そして:

Q:アクティブレコードの目的は何ですか?純粋なクエリを書くことはできますか?それはより良い選択のように思われるからです。(たぶん私は間違っていますか?)

人々はこの論争の両側陥ります。アンチパターンであるため、ORMを完全に放棄すると言う人もいます。あなたは問題の両側に頑固な支持者を見つけるでしょう。

私たちが知っていることは、SQLが吐き出されることについてのかなりの量の基礎知識とともに使用されるべきであるということです。確かに便利ですが、パフォーマンスの低いクエリを実行している場合や、何かが期待どおりに機能していない場合は、準備を整えてください。必要に応じていつでも純粋なSQLを記述できます。乾杯。


この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

なぜflatMapを使用する必要があるのですか?

分類Dev

なぜ基数を使用する必要があるのですか?

分類Dev

なぜEMFを使用する必要があるのですか?

分類Dev

なぜIDEを使用する必要があるのですか?

分類Dev

SerializeFieldを使用する必要があるのはなぜですか?

分類Dev

SerializeFieldを使用する必要があるのはなぜですか?

分類Dev

なぜJPanelを使用する必要があるのですか?

分類Dev

なぜstd :: forwardを使用する必要があるのですか?

分類Dev

なぜDjangoREST APIを使用する必要があるのですか?

分類Dev

なぜstrdup()を使用する必要があるのですか?

分類Dev

なぜgruntを使用する必要があるのですか-useminPrepare

分類Dev

chrootを使用する必要があるのはなぜですか

分類Dev

なぜ@ngrx / storeを使用する必要があるのですか?

分類Dev

なぜreduxreact Nativeを使用する必要があるのですか?

分類Dev

Fortranで「使用のみ」を使用する必要があるのはなぜですか

分類Dev

なぜshutdownNow()ではなくawaitTerminationを使用する必要があるのですか?

分類Dev

Railsパラメーターにfetchを使用する必要があるのはなぜですか?

分類Dev

'react'からimportReactを使用する必要があるのはなぜですか

分類Dev

AndroidでRequestQueueを使用する必要があるのはなぜですか?

分類Dev

StackでDequeを使用する必要があるのはなぜですか?

分類Dev

$ resourceで$ promiseを使用する必要があるのはなぜですか?

分類Dev

Flutterでカードを使用する必要があるのはなぜですか?

分類Dev

Angular UnitTestingでJasmineSpy Objectを使用する必要があるのはなぜですか?

分類Dev

mongoDBクエリで+を使用する必要があるのはなぜですか

分類Dev

ReactJsでweb-packを使用する必要があるのはなぜですか?

分類Dev

jQueryにGoogleのCDNを使用する必要があるのはなぜですか?

分類Dev

なぜawt.Dimensionクラスを使用する必要があるのですか?

分類Dev

いつ、なぜsession_regenerate_id()を使用する必要があるのですか?

分類Dev

Validators.compose()を使用する必要があるのはなぜですか?

Related 関連記事

  1. 1

    なぜflatMapを使用する必要があるのですか?

  2. 2

    なぜ基数を使用する必要があるのですか?

  3. 3

    なぜEMFを使用する必要があるのですか?

  4. 4

    なぜIDEを使用する必要があるのですか?

  5. 5

    SerializeFieldを使用する必要があるのはなぜですか?

  6. 6

    SerializeFieldを使用する必要があるのはなぜですか?

  7. 7

    なぜJPanelを使用する必要があるのですか?

  8. 8

    なぜstd :: forwardを使用する必要があるのですか?

  9. 9

    なぜDjangoREST APIを使用する必要があるのですか?

  10. 10

    なぜstrdup()を使用する必要があるのですか?

  11. 11

    なぜgruntを使用する必要があるのですか-useminPrepare

  12. 12

    chrootを使用する必要があるのはなぜですか

  13. 13

    なぜ@ngrx / storeを使用する必要があるのですか?

  14. 14

    なぜreduxreact Nativeを使用する必要があるのですか?

  15. 15

    Fortranで「使用のみ」を使用する必要があるのはなぜですか

  16. 16

    なぜshutdownNow()ではなくawaitTerminationを使用する必要があるのですか?

  17. 17

    Railsパラメーターにfetchを使用する必要があるのはなぜですか?

  18. 18

    'react'からimportReactを使用する必要があるのはなぜですか

  19. 19

    AndroidでRequestQueueを使用する必要があるのはなぜですか?

  20. 20

    StackでDequeを使用する必要があるのはなぜですか?

  21. 21

    $ resourceで$ promiseを使用する必要があるのはなぜですか?

  22. 22

    Flutterでカードを使用する必要があるのはなぜですか?

  23. 23

    Angular UnitTestingでJasmineSpy Objectを使用する必要があるのはなぜですか?

  24. 24

    mongoDBクエリで+を使用する必要があるのはなぜですか

  25. 25

    ReactJsでweb-packを使用する必要があるのはなぜですか?

  26. 26

    jQueryにGoogleのCDNを使用する必要があるのはなぜですか?

  27. 27

    なぜawt.Dimensionクラスを使用する必要があるのですか?

  28. 28

    いつ、なぜsession_regenerate_id()を使用する必要があるのですか?

  29. 29

    Validators.compose()を使用する必要があるのはなぜですか?

ホットタグ

アーカイブ