問題タブ [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.
ruby-on-rails - Rails のデフォルト スコープの順序付け
モデルにデフォルトのスコープを追加しようとしていますが、最初にある属性で昇順に並べ替え、次に別のモデルの委任された属性で昇順に並べ替える必要があります。
私はこれまでのところこれを持っています:
park_name が存在しないというエラーが表示され続けますが (そのモデルには存在しないため、これは事実です)、委任されています。
これを修正する方法についてのアイデアはありますか?
ruby-on-rails - Railsはdefault_scopeを重複して結合します
Rails 4.0.2 の default_scope を join で使用しようとしていますが、呼び出すとUnit.with_active_properties
次のような SQL が重複して表示されるのはなぜですか?
ruby-on-rails-4 - これらのネストされたスコープなしブロックが Rails 3 で機能するのに、Rails 4 で default_scope を削除するように機能しないのはなぜですか?
私の質問
Rails 4 は、ネストされたスコープ外のブロックを無視しているようです (Rails 3 では問題ありませんでした)。私は狂ったようにグーグルしてきましたが、ここで変化を示すものは何も見つかりません. Rails 4でこれを機能させる方法はありますか?
私がしていること
#388 Multitenancy with Scopesに示されているように、マルチテナンシーに default_scope を使用しています。一部の管理者は複数のテナントの管理者になり、レポートに集計データを表示したいと考えています。スコープ外のブロックを使用してこれを行っています。1) より効率的であり、2) 関連するすべてのオブジェクトを 1 か所で取得する必要があるため、ビューでスコープ外のブロックを使用し続ける必要がないため、関連するオブジェクトもプリロードしています。関連するオブジェクトをプリロードするために、ネストされたスコープなしブロックを使用しています。
Rails 3.2.17 のアプリでこれが機能していましたが、Rails 4.0.1.rc1 にアップグレードしたため、機能しなくなりました。
違いを説明する簡単な例
以下に、コンソールに表示される内容を示します。この例は、私が実際にやりたいことよりもはるかに単純ですが、何が起こっているかを示す最も簡単な方法だと思います。
そのため、提出物をロードし、関連するチェックリストをプリロードしています。次に、提出物とそれに関連するチェックリストの両方が利用可能であることを確認できます。
Rails 4 環境 (どちらも同じデータベースで動作) に切り替えると、次のように表示されます。
私はまったく同じコードを実行していますが、提出のみが利用可能です - 関連するチェックリストはありません。
FWIW、これをコンソールで実行すると、Rails 3.2.17でこれを複製できます。注: ここでの違いは、Submission.unscoped {} ブロックのみを使用しており、Checklist.unscoped {} ブロックをネストしていないことです。
アップデート
Rails のソースを掘り下げてみたところ、「unscoped」メソッドは現在のマスターと 3.2-stable で同じですが、そのメソッドは「relation.scoping」を呼び出し、そのメソッドは 2 つのブランチ間で大幅に異なっていることがわかります。バグが導入されたのか、それとも予想される動作が変更されたのかはわかりません。
参考のため:
関係のスコープ
current_scope
関係のスコープ
with_scopeメソッドへのリンク...
ruby-on-rails - モデルの default_scope を設定しようとしている Rails アプリケーション
このアプリケーションでは、モデル Resource_Estimations は会社によって行われます。会社名の Resource_Estimations のデフォルトの並べ替え順序が必要です。
会社のモデル
Resource_Estimation モデル
Resource_Estimation モデルの最後のステートメント (default_scope) を変更しようとしています。現在の company_id の並べ替え順序ではなく、並べ替え順序を company.name にしたいと考えています。多くのことを試しましたが、これまでのところ運がありません。どんな提案も歓迎します - ピエールに感謝します
ruby-on-rails - Rails 4 - act_as_votable、デフォルトのソート順を変更
一部のモデルに投票できるRailsアプリがあります。私のモデルの 1 つで、default_scope
投票数が最も多いオブジェクトが最初に表示されるように変更したいと考えています。モデルファイルで次のことを試しました:
これにより、次のエラーが表示されます。
デフォルトのデフォルトのソート順を変更する方法があるのだろうか、私がやっていることは明らかに機能していません。
可能であれば、コントローラ レベル (デフォルトの順序ではない) で動作させるためのソリューションもいいでしょう。
ruby-on-rails - Rails 3.0 - Proc を使用した default_scope が機能しない
Rails 3.0 で書かれた大きなプロジェクトがあります。
そのプロジェクトの最大のモデルがQuestinaryです。すべての典型的なモデルとして ActiveRecord::Base から継承されます。そのモデルの多くの部分は、Questionary から継承された個別のモデルに取り出されました。
そのようなモデルのスコープに問題があります。問題は、ActiveRecord がスコープを理解せず、Proc を使用することです。Procs を使用して Questinary モデル自体にスコープを設定すると、正常に動作します。また、スコープには Proc が含まれていませんでした。
エラーメッセージはundefined method 'includes_values' for #<Proc:0x000000081cde98>
バックトレース:
ご覧のとおり、ActiveAdmin から ActiveRecord が呼び出されているため、問題はそれに関連している可能性があります。
古いバージョンの gem が良くないことは知っていますが、アプリケーションが壊れるので更新できません。
約 1 年前、それはうまく機能していましたが、その後サーバーが分解されました。今、私はそれを生き返らせる必要があります。
更新:
スコープの例:
sql - Rails の ActiveRecord モデルの場所を強制する
Active Record で実行するすべての SELECT ステートメントに where ステートメントを強制的に含める方法はありますか? Rails4を使用しています。
例:私が電話した場合:
次に、Rails に次のような SQL クエリを生成させます。
whereproducts.client_id = 1
は、強制された where ステートメントです。where またはその他の ORM メソッド (など) を介して定義する他のすべての条件find
も、ステートメントに含める必要があります。
そのような強制条件を定義する可能性はありますか?
ruby-on-rails-4 - default_scope は関連モデルのスコープでは機能しません
次のようなモデル設定があります。
default_scope は、background_job を持たないサブジェクトを返します
SubSubject モデルは次のとおりです。
しかし、subject.sub_subjects.ordered を実行すると、次のエラーが発生します。
subject.subjects (注文なし) を呼び出すと、正常に動作します
また、件名の独自の属性で default_scope を設定しようとしましたが、うまく機能します
何が問題なのかわかりません、助けてください
編集:
SubSubject.joins{subject}.order('subjects.order_number') を実行したときに Rails が実行する SQL クエリは次のとおりです。
ruby-on-rails - 苗字順
User モデルのデフォルト スコープを設定しようとしています。各ユーザーには 1 つの名前列があります。問題は、ユーザーを姓の最初の文字で並べ替えたいことです。これは、名前の最後の単語の始まりになります。たとえば、ユーザー名が「Kevin John Smith」の場合、Smith で注文したいと思います。私は現在持っていますがdefault_scope order('name ASC')
、これは名の最初の文字でソートされます。これを姓の最初の文字で並べ替えるにはどうすればよいですか? ありがとう!