問題タブ [default-scope]

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 投票する
1 に答える
794 参照

ruby-on-rails - has_one ポリモーフィック アソシエーションの不在による Rails スコープ

ポリモーフィックな record_invalidations テーブルにエントリを作成することで、削除される代わりに無効化されるレコードがあります。

セットアップは次のようになります。

(複数のレコード クラスがあるため、ポリモーフィックな関係になります。)

質問: 問題のクラスを指す別のクラスにエントリがないことに基づいてレコードを返すスコープを作成するにはどうすればよいですか。

リレーション ポインタが records テーブルではなく records_invalidations テーブルにあるため、現在のコードは機能しません。

更新 2

record_invalidation クラスはテーブル名とうまく一致します。問題は列名だと思います。(簡略化された)スキーマは次のとおりです。

更新 3

最初のエラーが発生した理由がわかったので、その更新を削除しました。現在、SQL クエリに参加している正しいテーブル名を渡していますが、いくつかの引数が一致していません。where 句に別の引数を渡すことはできますか?

与えます:

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

ruby-on-rails - Rails 4リレーションはソートされていません:デフォルトスコープを持つ「has_many」関連付け、「includes」と「order」が連鎖しています

モデル QuizCategoryWeight に並べ替え順序を課すために、デフォルトのスコープを使用しようとしています。目標は、@possible_answer.quiz_category_weights が重みをソートされた順序で返すようにすることです。

更新: 問題を絞り込んで、デフォルトのスコープは「注文」メソッドだけを持っている限り機能するように見えますが、「インクルード」メソッドが「注文」メソッドとチェーンされている場合はそうではありません。ただし、この連鎖は名前付きスコープに対して機能します。

それは私の開発環境でしょうか?それともRailsのバグでしょうか?

私はWindowsを使用しているので、おそらくそれが問題です。現在、ruby 2.0.0p645 (2015-04-13) [i386-mingw32] と Rails 4.2.4...

QuizCategoryWeight でデフォルトのスコープを使用する以下は、機能しないようです。

名前付きスコープを使用すると、機能します。ただし、これは、コレクション「f.object.quiz_category_weights.sorted」を使用するために、フォーム ビルダーに引数を追加する必要があることを意味します。

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

ruby-on-rails - default_scope がレコードを除外するときに ActiveRecord::Base.update を使用する方法は?

更新するレコードを除外する既定のスコープがある場合、オブジェクトで update を使用するにはどうすればよいですか?

デフォルトのスコープ

プレイヤーコントローラー

エラー

set_player

スタックトレース

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

ruby-on-rails - 空の?ActiveRecord で default_scope( :order) で失敗する

Person モデルに組織があるかどうかを確認したい場合があります。簡単です。使用して@person.organizations.empty?ください。ただし、default_scope ( default_scope { order(:name) }) と組み合わせると、次のエラーが発生します。

ActiveRecord::StatementInvalid (PG::InvalidColumnReference: エラー: SELECT DISTINCT の場合、ORDER BY 式は選択リストに表示する必要があります LINE 1: ... WHERE "relationships"."person_id" = $1 ORDER BY "organizat... ^

: SELECT DISTINCT 1 AS one FROM "organizations" INNER JOIN "contracts" ON "organizations"."id" = "contracts"."organization_id" INNER JOIN "relationships" ON "contracts"."id" = "relationships"." contract_id" WHERE "relationships"."person_id" = $1 ORDER BY "organizations"."name" ASC LIMIT 1):

私は Postgres DB を使用しており、(簡略化された) モデルのセットアップは次のようになります。

私がこれまでに試したこと:

これはおそらく、アクティブレコードに事前に何が来るかを確認させます(そうではありませんでした)そして

コンソールに手動で配置すると問題は解決しますが、アプリ自体には役立ちません。を使用しているときに、 ActiveRecordにempty?クエリを別の形式に強制したり、順序を削除させたりする方法empty?

編集:明確にするために、使用が機能することを完全に認識しており@person.organizations.count == 0、おそらく他の1回限りのソリューションがあります。しかし、私は一般的なものを探しているので、繰り返し続ける必要はありません。

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

ruby-on-rails-4 - default_scope を設定しようとしたが、「ブロックなしで #default_scope を呼び出すためのサポートが削除されました」というエラーが表示される

Rails 4.2.3 を使用しています。私はこの2つのモデルを持っています

「MyObject」をロードするときに親の関連付けを自動ロードしたいのですが、「default_scope」行でこのエラーが発生します…</p>

親の関連付けを自動ロードするように「default_scope」行を調整するにはどうすればよいですか?

0 投票する
0 に答える
96 参照

ruby-on-rails - 「includes」を使用した ActiveRecord クエリは、default_scope を適用する場合と適用しない場合があります

includesユーザーの役割と場所を熱心にロードするために使用する User モデルで ActiveRecord クエリを実行しようとしています。(ユーザーには多くの役割があり、多くの場所があります) Location モデルにはデフォルトのスコープがあります。それは:

where(:status => [0, 2])

で簡単なクエリを実行するとincludes、Location モデルのデフォルト スコープが適用されます。たとえば、クエリは次のとおりです。

User.includes(:roles, :locations)

SQL 出力には次のものが含まれます。

SELECT "locations".*, "t0"."user_id" AS ar_association_key_name FROM "locations" INNER JOIN "locations_users" "t0" ON "locations"."id" = "t0"."location_id" WHERE "locations"."status" IN (0, 2)

ただし、次のような少し複雑なクエリがあります。

User.includes(:roles, :locations).where(roles: {id: 13})

Location のデフォルト スコープを適用しません。ステータスの場所1は、ユーザーが返した場所に含まれています。

SELECT最初のクエリは複数のステートメントで実行されるのに対し、2 番目のクエリはSELECT多くの s を持つ 1 つのステートメントとして実行されることに気付きましたJOIN。すべての場合に default_scope が適用されるようにするにはどうすればよいですか?

Rails 3.2.22 を使用しています。

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

ruby-on-rails - default_scope のオーバーライド

誰かがオーバーライドする方法を見つけるのを手伝ってくれませんかdefault_scope

私の見解では、すべての一致を表示する必要があるmatchesだけでなく、{ where("match_date >= now()") }すべてを表示する必要があります。default_scope を使用する理由があります。私はRailsで非常に新しいです。unscoped を使用しようとしましたが、役に立たなかったか、適切に使用していませんでした。助言がありますか?ありがとう!

コントローラ

意見

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

ruby-on-rails - レールに条件付きのデフォルトスコープを設定することは可能ですか?

私はレール 3.2.21 を使用しています。ルビーのバージョンは 2.0 です。

私の要件は、特定のモデルのロール ベースの条件付きデフォルト スコープを持つことです。例えば

ロール変数をログイン ユーザーの属性と見なす

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

ruby-on-rails - Railsスコープに複数の条件を追加するには?

私はこれをしばらく探していましたが、答えが見つからないようです。ただし、私よりも Rails の経験が豊富な場合は、かなり簡単に修正できるはずです。製品モデルに複数の default_scope 条件を追加しようとしています。私の製品モデルファイルは次のとおりです。

私も追加したいと思います

製品インデックス ページの新製品が新しいものから順に表示されるようにします。次のようなことを行うたびに、構文エラー メッセージが表示されます。

また

また

これはおそらく、私が理解していない単なる構文であることを知っています。これを修正する方法について誰かが私にアドバイスをくれるなら、それは大歓迎です! ありがとう!