問題タブ [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.
ruby-on-rails - 複雑な SQL クエリに相当する Rails 3
次のモデルがあるとします。
Rails 3 で Arel を使用して次の SQL クエリを実行するにはどうすればよいですか?
distinct - arel/関係代数を使用して個別の値をフェッチする方法
私は脳をアレルとその背後にある関係代数の周りに曲げるために最善を尽くしていますが、aを表現する方法SELECT DISTINCT
は一貫して私の理解を逃しています。誰もがアレルする方法を説明できますか?
どうもありがとう!
ruby-on-rails - Rails3の動作を介してネストされたhas_and_belongs_to_manyのシミュレーション
そのため、Railsはhabtm関係を介した:throughアソシエーションをサポートしていません。Rails 2.xにこれを追加するプラグインがありますが、私はRails 3 / Edgeを使用しており、特定の1つのモデルの関連付けのみが必要です。だから、アレルという美しさで自分で切り刻むと思いました。
まず、モデル:
特定のカードセット、:through=>カードに属するすべての学習を取得したいと思います。
これは、CardSetモデルでこれまでに使用したものです。
それは私に与えます(くそー、アレルは美しいです!):
これは私が目指しているものに非常に近いです-cards
ステートメントのFROM部分のテーブルに追加する必要があります。
そして、私の質問があります:私はArelソースを調べました、そして私の人生の間、私は別のテーブルに追加する方法を理解することができません。
補足として、SQLにレンダリングしてfind_by_sqlを使用してクエリを実行する以外に、ActiveRecordを介してArel(通常はArel :: Relationshipを返します)から結果を実行するためのより良い方法はありますか?やってる?
activerecord - Rails 3 スコープの奇妙な動作
Rails 3 アプリケーションに次のスコープを実装しました。
ただし、そのレコードを直接カウントしようとすると、スコープ フィルターが適用されないようです。
例えば:
ログを確認すると、次のクエリが実行されます。
今私が実行すると
そして、正しいクエリが実行されます:
他の誰かがこの種の行動を経験しましたか? もしそうなら、これが予想される動作なのか、それともバグに直面しているのでしょうか?
敬具、DBA
ruby-on-rails - 問題: activerecord (rails3)、インクルードによるスコープの連鎖
Rails3 では、それぞれが異なるインクルードを持つ 2 つのスコープ (ActiveRelations) をチェーンするときに問題があるようです。
次の 2 つのスコープを考えてみましょう。どちらも単独で問題なく動作します。
最初のスコープ:
Work.global_only(user) => (読みやすくするために SQL からフィールドのリストを切り取ります)
次に、2 番目のスコープ:
Work.not_belonging_to(user) => (読みやすさのために SQL からフィールドのリストをカット)
したがって、これらは両方とも個別に適切に機能します。
次に、それらを連鎖させます。
Work.global_only(user).not_belonging_to(user)
SQL:
ご覧のとおり、2 番目のスコープからの結合は完全に無視されます。したがって、SQL は「no such column 'participants.user_id」で失敗します。スコープを逆の順序でチェーンすると、「参加者」結合が存在し、「国」結合が失われます。失われるのは常に 2 番目の結合です。
これは ActiveRecord のバグのように見えますか、それとも私が何か間違ったことをしているのですか、それともこれは「機能」ですか :-)
(追伸。はい、知っています。両方のテーブルを結合するスコープを作成すると、必要な結果が正しく得られます。それは既にあります。しかし、さまざまな方法でチェーンできるよりも小さなスコープを作成しようとしていました。単純な sql に対する activerecord の利点であると考えられています。)
ruby-on-rails - モデルからRails 3で複雑なArelクエリを実行する方法
Rails 3 を使用しており、Arel で作成したいくつかの結合で構成される SQL クエリがあります。モデルの 1 つのメソッドからこのクエリを実行したいのですが、その方法がわかりません。arel オブジェクトは Arel::InnerJoin 型であることが判明したため、そのクエリから返されたすべてのオブジェクトの配列を取得したいと考えています。そのために ModelName.find_by_sql(my_arel_query_object) を実行する必要がありますか? または、 my_arel_query_object.each {...} を実行し、各タプルを反復処理して、手動で配列にポップする必要がありますか?
私は自分自身を明確にしていることを願っています。どんな洞察も大歓迎です。ありがとう。
更新: ユーザー モデル内で使用するコードは次のとおりです。
ここで私がしようとしているのは、ユーザーが所有する各レストランで提供されるすべての食事に使用されるすべての食材を取得することです。components_for_user 変数は、実行したい Arel クエリを表します。すべての成分を実行して返す方法がわかりません.Ingredient.find_by_sql ...は正しくないようです。
終わり
ruby-on-rails - Rails3 と Arel で IN を使用して選択し、サブ選択する
translations というテーブルがあります。(および対応する ActiveRecord クラス)。このテーブルには、次のフィールド id、キー、および値が含まれています
キーが特定のクエリに一致するすべての翻訳 + クエリに一致しないすべての翻訳を選択したいのですが、クエリに一致する翻訳とキーを共有します。
結果の SQL は次のようになります。
いろいろ試してみたのですが、よくわかりません。これをArelで表現する方法についてのアイデアはありますか?
ruby-on-rails-3 - arelのunionで複雑なクエリを書き直しますか?
私は次のモデルを持っています
そして、私は次のクエリを持っています:
つまり、特定の国コードをカバーするか、代わりに空の国コードをカバーするすべての宅配便業者を探しています(フォールバック)。
クエリは機能しますが、それを書くためのより良い方法があるかどうか疑問に思っていますか?
ruby-on-rails - RailsArelが個別の列を選択
scope
新しいメソッド(Arel 0.4.0、Rails 3.0.0.rc)でわずかなブロックにぶつかりました
基本的に私は持っています:
topics
モデル、which has_many :comments
、およびcomments
モデル(topic_id
列付き)which belongs_to :topics
。
「ホットトピック」、つまり最近コメントされたトピックのコレクションを取得しようとしています。現在のコードは次のとおりです。
を実行するTopic.hot.to_sql
と、次のクエリが実行されます。
これは正常に機能しますが、重複するトピックが返される可能性があります-トピック#3が最近数回コメントされた場合、数回返されます。
私の質問
comments.created_at
最後の投稿がどれくらい前であったかを表示するために、まだフィールドにアクセスする必要があることを念頭に置いて、個別のトピックのセットを返すにはどうすればよいですか?distinct
またはの線に沿って何かを想像しますがgroup_by
、それについてどのように最善を尽くすのかよくわかりません。
どんなアドバイス/提案も大歓迎です-私はすぐにエレガントな解決策に到達することを期待して100レップの報奨金を追加しました。
ruby-on-rails - Rails 3 での計算を使用したグループ クエリ
Rails3の問題。次の属性を持つ食品の Foods テーブルがあります。
- 名前
- カロリー(グラムあたり)
- 脂肪 (グラムあたり)
- 炭水化物(グラムあたり)
- タンパク質(グラムあたり)
次に、特定の時間に食べられた食品を表す LoggedFoods テーブルを作成します。次の属性があります。
- food_id
- number_of_grams_eaten
- ate_when (日時)
したがって、私が抱えている問題は、1 日 (すべての日) に消費されるカロリー、脂肪、タンパク質、炭水化物の合計数を 1 つのクエリで取得したいということです。新しい ActiveRecord クエリ インターフェイスを使用してこの Rails 3 を実行しようとしましたが、うまくいきませんでした。何か案は?