[解決済み] Rails 3.0のArelとは何ですか?
質問
ActiveRecordの代替品で、クエリの代わりにオブジェクトを使用することは理解しています。
しかし...
なぜこの方がいいのか?
オブジェクトやクエリの作成が簡単になるのでしょうか?
より効率的なSQLクエリになるのでしょうか?
すべての主要なDBと互換性があるのでしょうか?- そうだと思います。
ストアドプロシージャは使いやすいですか、使いにくいですか。
どのように解決するのですか?
<ブロッククオートRails 3.0のArelとは一体何ですか?
リレーショナルクエリ演算子の代数をオブジェクトモデル化したものです。
<ブロッククオートActiveRecordの代替品であると理解しています。
いいえ、そうではありません。文字列で手作業でSQLクエリを作成するための代替品です。それは、共通のクエリ層である の下にある ActiveRecordの下敷きになっていますが、DataMapperなどの下敷きにもなります。
何かの代替になるとすれば、Ambitionの代替になります。あるいは、LINQの標準的なクエリ演算子やPythonのSQLAlchemyのRuby版と考えてもよいでしょう。(実際、著者はLINQとSQLAlchemyの両方をインスピレーションとして明示的に引用しています)。
の置き換えとして見ることもできます。
named_scope
s. 実際、ARel は、"すべてのクエリは
named_scope
という考えを実現したものです。そして、なんと、どちらも同じ人物によって書かれたものなのです。
と、クエリの代わりにオブジェクトを使用していることです。
いいえ、オブジェクトを使用します。 として クエリとして使用します。
なぜこれが良いのでしょうか?
Rubyはオブジェクト指向の言語であり、文字列指向の言語ではありません。そのため だけ では、クエリを文字列ではなくオブジェクトとして表現することは理にかなっています。すべてに文字列を使用するのではなく、クエリのために適切なオブジェクトモデルを構築することは、すべてに文字列を使用するのではなく、会計システムのために適切なオブジェクトモデルを構築することとほぼ同じ利点をもたらします。
もう一つの大きな利点は、ARelが実際の 代数 を実装していることです。言い換えれば、ARelはクエリを構築し構成するための数学的ルールを知っているのです。2つの文字列を連結し、それぞれが有効なSQLクエリを含む場合、その結果はおそらく有効なSQLクエリにならないでしょう。あるいは、さらに悪いことに、それは は は有効なSQLクエリだが、意味をなさない、あるいは思っていることと全く違うことをするものである。このような場合 決して ARel では起こり得ません (以下にリンクする記事で、"closed under composition" が意味するのは、このことです)。
オブジェクトやクエリの作成はより簡単になりますか?
そうです。例えば、上で述べたように、より複雑なクエリをより単純な部分から構築することがより簡単になります。
より効率的なSQLクエリにつながるのでしょうか?
ARelがクエリのための適切なオブジェクトモデルを持っているということは、実際のSQLクエリを生成するずっと前に、これらのクエリに対して最適化を実行することができるということなのです。
すべての主要なDBと互換性があるのでしょうか?- そうだと思います。
実は、上記ではいつもSQLについて話していますが、実はリレーショナルクエリ代数はほとんどすべてのものに対してクエリを生成することができるのです。もう一度、例としてLINQやAmbitionを見てみましょう。どちらも同じ構文でSQL、LDAP、ActiveResource、CouchDB、Amazon、Google、...すべてに問い合わせることができます。
ARel が何であるか、そしてなぜ Nick Kallen が書いたかについて、おそらく最も良い議論は、適切な名前の記事である なぜアーエルなのか? by Nick Kallen 自身によるものです。注:この記事には若干の数学とコンピュータ・サイエンスの専門用語が含まれていますが、それこそがポイントです。ARel は数学とコンピュータ サイエンスにおける強力な基盤を持っており、それらの基盤が ARel に強力な特性を与えているのです。
関連
-
[解決済み] サーバーに接続できませんでした。そのようなファイルまたはディレクトリがありません (PG::ConnectionBad)
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Ruby on RailsでJSON出力を "きれい "にフォーマットする方法
-
[解決済み] NOT NILを使ったRailsのWHEREコンディション
-
[解決済み] Railsの:includeと:joinsの比較
-
[解決済み】Railsの認証トークンを理解する
-
[解決済み] ArelとRailsでLIKEクエリを実行するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Rails: sudo "コマンドが認識されないのはなぜですか?
-
[解決済み】コレクションをDESCで並べる方法
-
[解決済み] gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み] 変更欄のRailsマイグレーション
-
[解決済み] Rubyで変数をインクリメントする [重複]。
-
[解決済み] Ruby on rails "No route matches" (ルートに一致するものがない)。
-
[解決済み] Railsで `before_action` での `only:` はどのように機能するのですか?
-
[解決済み] Railsコントローラからホスト名を取得する
-
[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?
-
[解決済み] Ruby on Rails の新規セットアップ : "Expected string default value for '--rc'; got false (boolean)".