問題タブ [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.
sql - 複数の 'having' 節が Rails 3 を爆破する / Arel
Rails 3 / Arel でバグを見つけたと思いますが、修正を試みたり、バグ レポートを送信したりする前に、誰かが私の問題を明確にしてくれることを願っています。
- 質問モデルを使用した非常に単純なアプリ: (submitter_id: integer, option_count: integer)
私が使用しているコード:
これは次のように爆発します:
「having」句の 1 つを削除すると、問題が修正され、適切な SQL が生成されます。
コメントをいただければ幸いです。Arel と Rails 3 はエッジ バージョンであり、上記のエラーに記載されているリビジョンがあります。
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)
それで...
読みやすさは別として、スコープでクエリを磨くことで何が得られるでしょうか?レコードが増えると、最終的には速くなりますか?
ruby-on-rails - モデル内の仮想列
モデルに仮想列を追加することは可能ですか (仮想属性ではありません!)?
私は次のような状況を持っています: AProduct(id, name)
には多くのProductVariant(id, price, offer_price, product_id,...)
ProductVariants
すべての製品を選択すると、製品結果のすべてから最小の製品価格が得られます。
SQL クエリ ( ) で最低価格を計算し、この値をmy のそれぞれにwith_min_price
追加したいと考えています。min_price
Product
@products result
ruby-on-rails - Establish_connection は結合をサポートしていないようです
最終的に複数のアプリケーションで共有できるように、ユーザー アカウントとセッション データを別のデータベースに移動しようとしています。
モデルに別のデータベースに接続するように指示するために使用することをオンラインで多くの人が言っているのを見てきましたestablish_connection
が、これを機能させることができません。
config/database.yml
アプリ/モデル/user.rb
アプリ/モデル/person.rb
これはうまくいっているようです:
User
単独でクエリを実行できます。
しかし、使用しようとするとすぐjoin
に壊れます:
ARel は、リフレクションによって正しいデータベースを取得するのではなく、現在のデータベースを使用しているようです。
この問題について、ほぼ 2 年前のこの非常に古いバグ レポートを見つけましたが、それが古い ARel 構文に関するものであることはほぼ確実であり、コード例がもう機能するかどうかは本当に疑わしいです。
これは可能ですか?
更新:これを行うことで少し前進しました:
しかし、それは本当に退屈で、私が参加したいテーブルの 1 つはポリモーフィックです。
追加してみました:
しかし、それは戻ります
Rails3 は実際には複数のスキーマをサポートしていないようです。私が間違っている?
ruby-on-rails - Rails 3 / Arelでカウントクエリを実行する特にエレガントな方法はありますか?
Rails2 クエリは次のとおりです。
クエリは醜いですが、結果の SQL は理想的です。
Rails 3 / Arelでこれを行うよりエレガントな方法はありますか?
編集
これはきれいですが、まだ Arel マジックではありません。
ruby-on-rails - Arel and RailsでLIKEクエリを実行するにはどうすればよいですか?
私は次のようなことをしたい:
アレルでの私の試み:
ただし、これは次のようになります。
Arelはクエリ文字列'Smith'を正しくラップしますが、これはLIKEステートメントであるため、機能しません。
ArelでLIKEクエリを実行するにはどうすればよいですか?
PSボーナス-私は実際にテーブルの2つのフィールド(名前と説明の両方)をスキャンして、クエリに一致するものがあるかどうかを確認しようとしています。それはどのように機能しますか?
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))
sql - Rails 3: `AR#or_where` はありますか?
AR#or_where
Rails 3には次のようなものがありますか
?
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に感謝します!