2009-08-05 6 views

答えて

20

免責事項:私はSequelのメンテナーです。

Railsを使用している場合、SequelはActiveRecordの横にまたはその代わりに使いやすいです。手動でデータベース接続をセットアップする必要がありますが、それ以外の使用法は似ています。あなたのSequelモデルファイルは、アプリケーション/モデルに入り、ActiveRecordモデルと同様に動作します。

データベース接続を設定するのは面倒なことではありませんが、一般的にenvironment.rbでは後行を要求する行が1行あり、各環境ファイル(development.rb、test.rb、production.rb) :あなたは退屈なセットアップコードの4行を考慮すれば

DB = Sequel.connect(...は)だから、それだけで退屈です。

複数のデータベースを対象としていない限り、生のSQLを使用することは一般的に問題ありません。これを避ける主な理由は、冗長性の向上です。 Sequelは、少なくともActiveRecordと同じくらい簡単に生SQLを使用してサポートしますが、生のSQLを使用する必要がある時はSequelでは一般的に非常にまれです。

ところで、Sequelには複数の検証プラグインが同梱されています。 validation_class_methodsプラグインは、クラスメソッドを使用したActiveRecord検証と似ています。 validation_helpersプラグインは、インスタンスレベルのメソッドを使用したより簡単な実装ですが、どちらもほぼ同じことができます。

最後に、あなたが望むことを実行するActiveRecordコードを既に使用している場合、機能を追加する予定がない限り、Sequelにコードを移植する価値はないでしょう。

+0

私は反Sequel、btwとして出くわしたことはないと思う:それは実際に私の好みのオプションの外のレールです。私は2つのlibsを一緒に使用することで、必要なSQLが複雑になっても少しだけプラットフォームの独立性を得るために、多くのメリットがあるとは思えません。私は、特に開発者が自分が何を書こうとしているかをすでに知っているならば、それは残酷だと思う。このようなカスタムSQLを再構築することは、MySQLからOracleに移植するときに直面した最大のデータベース関連の問題ではありませんでした。 –

+0

アクティブなレコード接続から続編データベースオブジェクトを取得する方法に関するヒント – fotanus

3

個人的には、私はしません。手作業で接続を多かれ少なかれ管理するのは面倒です。 Yehudaと共同作業が適切に行われている場合、ORMを簡単に切り替えることができるはずのRails 3.0(またはおそらくEdge Railsからの開発を開始)を延期するために、Sequelがより強力な選択肢であると感じたら、 。少なくとも今はMerbのようなものです。 「

しかしIsnと:

これは、件名にDHHのテイク(馬の口から、いわば、私は心、それが福音の真実として取られるべきで言っていないんだけど、それがある)でしたt Sql Dirty?

プログラマは、リレーショナル・データベースの最上部 に 層のオブジェクト指向システムに始めて以来、彼らは は、抽象化を実行する方法 深いの質問で苦労してきました。一部の オブジェクトリレーショナルマッパーは、 を完全に使用して、 オブジェクト指向の純度を追求しようとしています。 別のOO レイヤーを介してすべてのクエリを強制します。

アクティブレコードはありません。それは のSQLが で汚いか悪いかではなく、 の単純なケースでは冗長ではないという考えで構築されました。重視の場合には 詳細を扱う必要はなくなりましたが、 の表現力を維持しています。タイプSQLは で、優雅に対処するために作成されました。

したがって、あなたがfind_by_sqlを使用するときに() いずれかのパフォーマンスのボトルネックやハード クエリを処理する 罪悪感を感じるべきではありません。 オブジェクト指向のインターフェイスを使って生産性と喜びのために の生産性と喜びのために始めて が必要なとき 金属の近くの経験のために表面の下に を浸す。

(引用はhereを発見された、オリジナルのテキストはAWDRWR、 "ハンモック" 本のP334です)。

私はそれが妥当だと思います。

私たちはfind_by_sqlが処理できないことについて話していますか?または、我々は複雑な非SELECTのものについて話していますか?executeは対処できませんか?

例を見てみましょう。

+0

私が探しているすべてのもの、find_by_sqlとsanitize_sql_arrayは対処できます。 SQLをハードコードしたのはちょっと不愉快です。私は非常に強力なSQL開発者ですから、これは本当に奇妙です。続編が示すようなLINQのようなものが好きです。しかし、あなたは正しいかもしれません。おそらく、性能が重要な場合には、レールアプリでSQLを汚くすることを受け入れることを学ぶべきです。 –

+0

これは興味深い答えでした。私はオプションを探していて、この会話は役に立ちました。 – uadrive

+0

Sequelでは、独自のSQL文も自由に作成できます。そして、SQLが汚いか悪いかという考えに基づいて構築されたものではありません。この場合はモジュール化されており、手作業で部分的に構築され、強力なツールで部分的に構築されたクエリをより簡単に作成できます。 –

関連する問題