問題タブ [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 投票する
3 に答える
273 参照

ruby-on-rails - カプセル化されたスコープを維持する ActiveRecord

私には 2 つのモデルがfooありbar、 にfooは多くの がありbarsます。

Barは一定期間発生するイベントなので、ActiveRecord::Relation現在アクティブなバーを持つ foo を表す を返すメソッドまたはスコープが必要です。

Fooこれは、スコープを持つクラスでは簡単です。

これについて私が気に入らないのはfoo、 の内部について非常に多くのことを知る必要があるということですbar

おそらく にスコープを追加することで、これを書き直すことができるbarので、属性fooについて知る必要はありませんか?bar

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

sql - has_many 関係で最新のオブジェクトを熱心に読み込むにはどうすればよいですか?

カテゴリや投稿などのモデルを持つ Rails 3 アプリがあります。

カテゴリー

has_many :投稿

役職

所属先:カテゴリ

ループして各カテゴリのデータベースにアクセスしたり、カテゴリごとに 1 つの投稿だけを引き戻したりすることなく、最新の投稿がその横にリストされたカテゴリのリストを表示できるようにしたいと考えています。

この質問が提起するのと同じことをしたい-SQL結合:1対多の関係で最後のレコードを選択する-ただし、できればActive Recordを使用します。

これはばかげたことですか?カテゴリのすべての投稿を熱心に読み込んで戻す必要がありますか? 私はパフォーマンスが気になったので、これを研究し始めました。

0 投票する
7 に答える
35010 参照

ruby-on-rails - Rails3の関連リレーションでスコープなしを使用するには?

情報セキュリティの制約により、製品の既定のスコープがあります。

ただし、関連付けられている Photo モデルでは、表示されてはならない製品も検索する必要があります。

他の場合では、default_scope をバイパスするためにunscopedProduct.unscoped.find_by_title('abc')を使用できます。でも:

レコードの関連付けを使用するときにスコープを削除するには?

my_photo.unscoped.productmy_photo には というメソッドがないため意味がありませんunscoped。すでに nil である可能性があるため、どちらもmy_photo.product.unscoped意味がありません。my_photo.product

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

ruby-on-rails-3 - 最高価格のレコードを見つける方法は?

これは、完全なレコードではなく、最大を返します。

そして現在、私は次のような記録を見つけました:

これは正しい方法ですか?上記を機能させるには 2 つの SQL ステートメントが必要であり、どういうわけか正しくないからです。

Ps。さらに、複数のレコードに同じ「最大」値がある場合は、最新のupdated_at値を持つレコードを取得する必要があります。それは別の SQL ステートメントを意味するのでしょうか??

pps。Rails の AREL および非 AREL に関する優れたリファレンスまたは詳細なリファレンスを知っている人はいますか? Rails Guide for ActiveRecord クエリだけでは十分ではありません!

(私はRails3を使用しています)

===更新===

AREL を使用して、次のことを行います。

しかし、これは完全な記録ではなく、最大を与えるだけです:(
また、maximum()本当にARELの使用はありますか?

0 投票する
3 に答える
16154 参照

ruby-on-rails-3 - 関連付けでスコープを使用する

だから私は、含まれる関連付けにスコープを適用したいというクレイジーなアイデアを思いつきました。これは私が理解したものであり、うまく機能しているようです:

問題は、それが本当に鈍いということです。Race でスコープを定義し (他の場所で使用するため)、それを Event の関連付けで使用するには、Race で 2 つのメソッドが必要です。スコープごとに。

パターンをプラグインなどにラップできると確信していますが、可能であればネイティブの AR/ARel を使用したいと考えています。それを行うためのアイデアはありますか?

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

ruby-on-rails-3 - モデル内でスコープされていない rails3 は、default_scope によってオーバーライドされます

私はこのモデルを持っています

ユーザー.rb

ORDER BY users.created_at DESC, users.ranking DESCそれでも私は...を含むto_sqlを取得します

誰かが理由を説明できますか?

このモデルを使用するすべてのコントローラーから unscoped を呼び出す必要はありません。

ありがとう!

0 投票する
3 に答える
2088 参照

ruby-on-rails - railsアクティブレコードの選択

Q:1つのクエリですべての投稿と関連するコメントを選択し、コメントの関係をp.commentsにロードしますが、コメントからタイトルのみを選択します

役職

コメント

必要なもの:1つのクエリですべての投稿と関連するコメントを選択し、コメントの関係をp.commentsにロードしますが、コメントからタイトルのみを選択します。

最初の部分が.includesによって行われる場合:

=>SELECT postsidAS t0_r0 、poststitleAS t0_r1 、poststextAS t0_r2 、postscreated_atAS t0_r3 、postsupdated_atAS t0_r4 、commentsidAS t1_r0 、commentstitleAS t1_r1 、commentstextAS t1_r2 、commentspost_idAS t1_r3 、commentscreated_atAS t1_r4 、commentsupdated_atAS t1_r5 FROM postsLEFT commentsOUTERJOINON commentspost_id= postsid

selectを完全に無視します。

では、参加してみましょう。

=> SELECT posts。*、comments.title FROM postsINNERJOINON 。= 。commentscommentspost_idpostsid

より良いですが、テーブルエイリアスが必要です-Railsはリレーションを処理しません(なぜですか?)

=> SELECTposts。*、comments.title ascomments_title FROM postsINNERJOINON 。= 。commentscommentspost_idpostsid

OK、ARelを試してみましょう

=>SELECT postsidpoststitlecommentsidcommentstitle内部posts結合commentsからcommentspost_id= postsid

同じ話-ActiveRecordはリレーションを処理しません。

助言がありますか?

UPD

  1. この質問が直接的な解決策ではない場合は、いくつかのARメソッドを使用して結果のクエリを変換する方法があるかもしれません。なぜなら、ARはARelを使用し、それに対してfind_by_sqlを呼び出してから、魔法をかけます。これは、いつ実行されたかを見つけることができず、ビオラ:生成されたエイリアスと読み込みの関連付けです。

  2. たぶん、1対1の関係の解決策はありますか?

    投稿=Post.select('posts.id、posts.title、comments.id、comments.title')。includes(:comment)posts.first.comment.loaded?#true

=>SELECT postsidAS t0_r0 、poststitleAS t0_r1 、poststextAS t0_r2 、postscreated_atAS t0_r3 、postsupdated_atAS t0_r4 、commentsidAS t1_r0 、commentstitleAS t1_r1 、commentstextAS t1_r2 、commentspost_idAS t1_r3 、commentscreated_atAS t1_r4 、commentsupdated_atAS t1_r5 FROM postsLEFT commentsOUTERJOINON commentspost_id= postsid

0 投票する
3 に答える
900 参照

ruby-on-rails-3 - Rails3HABTM-交差点エンティティにアクセス

Rails 3の多対多の関連付け(HABTM)の多態的な関係を概算しようとしています。

交差テーブル(user_favorites)には、user_id、favorite_id、favorite_classのフィールドがあります。

Userクラスでは、関係を定義しています。

データを取得する場合、これは期待どおりに機能します。残念ながら、この定義では、必要なfavorite_class'値(この状況では' User')は追加されません。

レコードを保存する前に、おそらくArelを使用して、favorite_classフィールドを目的の値に設定する方法はありますか?

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

ruby-on-rails - Rails3でのDBクエリ

ARel1を使用してRails3でこれらのクエリをどのように記述しますか

2.2。

クエリの!=NOTIN部分の書き方がわかりません。

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

ruby-on-rails - 注文しようとすると、ActiveRecord/Arel クエリが奇妙な結果に解決される

私は、MySQL から、より厳格で Rails にあまり適していないと思われる PostgreSQL への移行を試みています。

私はこの面白い難問に直面しています:

しかし...

これは、追加ORDER BY vendors.idするだけで有効な PostgreSQL クエリとして問題なく機能するという事実にもかかわらずです。それを追加するだけでなく、非常に面白いことを行い、一日の終わりに無効なクエリを生成します。

私が見るべき手がかりはありますか?