問題タブ [arel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2315 参照

sql - 複数の 'having' 節が Rails 3 を爆破する / Arel

Rails 3 / Arel でバグを見つけたと思いますが、修正を試みたり、バグ レポートを送信したりする前に、誰かが私の問題を明確にしてくれることを願っています。

  • 質問モデルを使用した非常に単純なアプリ: (submitter_id: integer, option_count: integer)

私が使用しているコード:

これは次のように爆発します:

「having」句の 1 つを削除すると、問題が修正され、適切な SQL が生成されます。

コメントをいただければ幸いです。Arel と Rails 3 はエッジ バージョンであり、上記のエラーに記載されているリビジョンがあります。

0 投票する
1 に答える
2114 参照

ruby-on-rails - Arel&MetaWhereとの複数のLIKEマッチ

SearchLogicを使用してRails-2.3で記述されたアプリケーションを、ArelとMetaWhereを使用してRails-3.0に移行していますが、書き込み方法がわからない操作が発生しています。

古いコードは次のとおりです。

これが行ったLIKEことは、params [:city]配列の各アイテムに対して一致を実行することでした。

これは、検索語が1つしかないMetaWhereでは簡単です。

しかし、これを任意の数の都市でどのように書くのでしょうか?

0 投票する
2 に答える
1057 参照

ruby-on-rails - 乱雑なコントローラーの方が速いのに、なぜRailsスコープが望ましいのですか?

私は、コントローラーで作成した長蛇の列のロジックを使用するのではなく、スコープを使用してArelクエリをチェーンしようとしてきました。ただし、スコープは、すべてのレコードを取得して、ロジックを使用してそれらを選別するよりも低速です。では、なぜスコープが優れているのか疑問に思います。

これが私がしていることです:

  • 質問には多くの答えがあります
  • 答えは1つの質問に属します
  • 質問には、並べ替えに使用する「question_type」列があります

まず、スコープの方法...

質問.rb:

question_controller.rb:

次に、ビューで、これらのインスタンス変数(現在は最大10個の要素を含む配列)を循環し、結果を表示します。

ページの読み込みにかかる時間(5つの異なる時間)は次のとおりです。

535msで200OKを完了(ビュー:189.6ms | ActiveRecord:46.2ms)

573msで200OKを完了(ビュー:186.0ms | ActiveRecord:46.3ms)

577msで200OKを完了(ビュー:189.0ms | ActiveRecord:45.6ms)

532msで200OKを完了(ビュー:182.9ms | ActiveRecord:46.1ms)

577msで200OKを完了(ビュー:186.7ms | ActiveRecord:46.9ms)

さて、厄介なコントローラーの方法...

そして、これが今ページをロードするのにかかる時間です(5つの異なる時間):

475msで200OKを完了(ビュー:196.5ms | ActiveRecord:34.5ms)

480msで200OKを完了(ビュー:200.4ms | ActiveRecord:36.4ms)

434msで200OKを完了(ビュー:198.2ms | ActiveRecord:35.8ms)

475msで200OKを完了(ビュー:194.2ms | ActiveRecord:36.4ms)

475msで200OKを完了(ビュー:195.0ms | ActiveRecord:35.4ms)

それで...

読みやすさは別として、スコープでクエリを磨くことで何が得られるでしょうか?レコードが増えると、最終的には速くなりますか?

0 投票する
2 に答える
5792 参照

ruby-on-rails - モデル内の仮想列

モデルに仮想列を追加することは可能ですか (仮想属性ではありません!)?

私は次のような状況を持っています: AProduct(id, name)には多くのProductVariant(id, price, offer_price, product_id,...)

ProductVariantsすべての製品を選択すると、製品結果のすべてから最小の製品価格が得られます。

SQL クエリ ( ) で最低価格を計算し、この値をmy のそれぞれにwith_min_price追加したいと考えています。min_priceProduct@products result

0 投票する
1 に答える
1338 参照

ruby-on-rails - Establish_connection は結合をサポートしていないようです

最終的に複数のアプリケーションで共有できるように、ユーザー アカウントとセッション データを別のデータベースに移動しようとしています。

モデルに別のデータベースに接続するように指示するために使用することをオンラインで多くの人が言っているのを見てきましたestablish_connectionが、これを機能させることができません。

config/database.yml

アプリ/モデル/user.rb

アプリ/モデル/person.rb

これはうまくいっているようです:

User単独でクエリを実行できます。

しかし、使用しようとするとすぐjoinに壊れます:

ARel は、リフレクションによって正しいデータベースを取得するのではなく、現在のデータベースを使用しているようです。

この問題について、ほぼ 2 年前のこの非常に古いバグ レポートを見つけましたが、それが古い ARel 構文に関するものであることはほぼ確実であり、コード例がもう機能するかどうかは本当に疑わしいです。

これは可能ですか?

更新:これを行うことで少し前進しました:

しかし、それは本当に退屈で、私が参加したいテーブルの 1 つはポリモーフィックです。

追加してみました:

しかし、それは戻ります

Rails3 は実際には複数のスキーマをサポートしていないようです。私が間違っている?

0 投票する
1 に答える
539 参照

ruby-on-rails - Rails 3 / Arelでカウントクエリを実行する特にエレガントな方法はありますか?

Rails2 クエリは次のとおりです。

クエリは醜いですが、結果の SQL は理想的です。

Rails 3 / Arelでこれを行うよりエレガントな方法はありますか?

編集

これはきれいですが、まだ Arel マジックではありません。

0 投票する
4 に答える
94060 参照

ruby-on-rails - Arel and RailsでLIKEクエリを実行するにはどうすればよいですか?

私は次のようなことをしたい:

アレルでの私の試み:

ただし、これは次のようになります。

Arelはクエリ文字列'Smith'を正しくラップしますが、これはLIKEステートメントであるため、機能しません。

ArelでLIKEクエリを実行するにはどうすればよいですか?

PSボーナス-私は実際にテーブルの2つのフィールド(名前と説明の両方)をスキャンして、クエリに一致するものがあるかどうかを確認しようとしています。それはどのように機能しますか?

0 投票する
1 に答える
83 参照

ruby-on-rails - どのように logcal を実行しますか、または別の関係を返す 2 つの ActiveRelation 結果を使用しますか?

次のコードがあるとします

製品を製造してドイツに流通させたい場合は、次のことができます。

上記の場合、必要に応じて、製品に割り当てる前に、より多くのリレーショナル メソッドを連鎖させることができます。

ドイツに関連するすべての製品にアクセスしたい場合は、次のようにします。

ここでは、OR の結果が::RelationではArrayないため、製品に割り当てる前にリレーショナル メソッドを連鎖させることはできません。ActiveRecord

私の質問は、for_country と from_country を OR しActiveRecord::Relationて、結果として a を取得するにはどうすればよいですか?

理想的には、次のようなものProduct.for_country(country).or(Product.from_country(country))

0 投票する
4 に答える
721 参照

sql - Rails 3: `AR#or_where` はありますか?

AR#or_whereRails 3には次のようなものがありますか

?

0 投票する
5 に答える
14091 参照

sql - サブクエリがNULLになる可能性がある場合のSQL「INサブクエリ」

サブクエリで一致しない結果を返す必要があるクエリがあります。サブクエリは空の結果を返す可能性があるため、サブクエリが空のセットを返す場合はデフォルト値(たとえば0)を設定して、IN (NULL)常に別のNULLが返されるのを防ぐ必要があります。

例えば

subquery_that_selects_ids整数のセット、つまり(1,2,5,6)を返すか、サブクエリで一致する結果が見つからない場合は空のセットを返すことができます。

COALESCEサブクエリは複数の結果を返す可能性があるため、ここでは機能しません。

ソリューションはSQLiteまたはpostgresqlで機能する必要があります。サブクエリが空のセットを返さないようにするにはどうすればよいですか?


クエリは記述どおりに機能するはずだと誰もが言っています。そして、あなたはすべて正しいです。クエリはRails3のARELによって作成されています。ここに完全なクエリを投稿しようとしたときに、配列条件を使用しているときにARELが空のセットにNULLを入力していることに気付きました。

IE Railsでの私のクエリは次のようになりました:

に置き換えられていたとObject.where(other_conditions)評価され[]たとき?NULL

そこで、クエリを次のように書き直します。

問題が解決しました。

私は@MichaelBuenの功績を認めていますが、クエリが正しいので、クエリが記述どおりに機能すると言った人にも賛成票を投じています。特に@OMGPoniesと@TedElliottに感謝します!