問題タブ [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 - :joins および :select を使用した default_scope
次の方法で default_scope を定義しようとしました。
私がRailsから得ているのはこれです:
これを named_scope として定義すると、すべて問題ありません。
これはバグであるはずですか、それとも正しい動作ですか?
Rails 2.3.4 を使用しています。
ありがとう!
ruby-on-rails - 古いレール バージョンのデフォルト スコープ
午後のすべて。
Rails 2.1で書かれたプロジェクトに取り組んでいます
新しいバージョンでは、かなりクールな方法を使用して、デフォルトのスコープを作成できます
Railsのバージョンをアップグレードせずに、どうすれば同じ/同様の効果を達成できますか?
ruby-on-rails - Railsでdefault_scopeをオーバーライドする
私のPost.rbモデルでは、default_scope :conditions => {:deleted => 'false'}
しかし、実行しようとするとPost.find(:all, :conditions => "deleted='false'")
、何も返されません。これは、default_scopeがすべてよりも優先されるかのようです。
削除した投稿が返されないようにしたいPost.find()
のですが、必要に応じてアクセスできるようにしたいと思います。クエリまたはRailsモデルのいずれかで何を変更する必要がありますか?
ありがとう。
ruby-on-rails - Rails 3のdefault_scope
Rails 3 で named_scope が scope に変更されたことは知っています。
Rails 3 で default_scope を実行するにはどうすればよいですか?
ruby-on-rails - いくつかの基準に従ってdefault_scopeを設定する
anaActionControllerbefore_filterによって決定されたいくつかの基準に従ってデフォルトのスコープを設定しようとしています。コントローラー内:
ActiveRecordの内部
しかし、それは機能していないようです。beforeフィルターが呼び出されますが、default_scopeは設定されません。私が間違っていることとそれを修正する方法を教えてください。またはそれを達成するための他の方法を提案してください。
ruby-on-rails - has_many を使用するときに default_scope から抜け出す方法はありますか?
私はツリーのようなモデルを持っていますが、1 つを除くすべての状況で、ルートのみを返すように結果をスコープしたいと考えています。
default_scope
License に関連付けられているさまざまなモデル (約 4 つあります) と、find() を使用するコードは特別なことをする必要がないため、使用は素晴らしいアイデアのように思えました。これが素晴らしいアイデアではない理由は、デフォルトのスコープが にも適用されhas_many
、その結果、子が見つからないためです。しかし、これは範囲外にする必要has_many
がある唯一の場所なので、「デフォルト」の動作に関する限り、これdefault_scope
は非常に合理的だと思います。
では、この特定の問題を回避する良い方法はありますか?
これは、ほとんど些細なクエリに SQL を使用するため、私があまり好きではないものです。
または、名前付きスコープをモデルからの関連付けに適用する方法はありますか? たとえば、このナンセンスコードの行に沿った何か:
私もこれを行うことができることを知っています:
しかし、それは実際にはあまり DRY ではありません。正直に言うと、実際にすべてのクエリを実行するLicence.roots.find()
代わりに、Licence.find()
それほど DRY ではありません。スコープが使用されていない場所でバグが発生することを求めているだけです。
ruby-on-rails - Rails 3 の default_scope に問題がありますか? NoMethodError
これをモデルに追加した後、奇妙なバグが発生しましたAlternative
:
最初のページ更新では、すべて正常に動作します。その後の更新で、私は得る
Alternative
確実にwritten?
方法があります。Passengerを実行しているので、
ページは再び機能します。初めてのリフレッシュに。しかし、その後の更新でエラー メッセージが再び表示されます。を削除default_scope
すると問題が解決します (ただし、別のサーバーの再起動後のみ)。
編集:このバグは、 を介して WEBrick で実行している場合にも存在するrails server
ため、Passenger には接続されません。
編集: written?
のインスタンス メソッドAlternative
です。このバグはhas_many
、次のようにを介して取得したメソッドにアクセスしようとしたときにも発生します。
default_scope
Rails 3 で問題を経験している人はいますか? または解決策がありますか?ありがとう!
ruby-on-rails - Railsのhas_manyアソシエーションのnamed_scopeをオーバーライドする最良の方法は?
注:私は3ではなくRails2.3.8を使用しています。
default_scopeの写真モデルがあります。
photo_album.photosを呼び出すと、公開されているすべての写真が位置順に返されます。ただし、管理パネルでこれらのフォトアルバムをループして、それぞれの写真の数を表示すると、結果は正しくありません。
公開されていないため、0を返します。
同様の質問がなされていることは知っていますが、回答は通常、「with_exclusive_scopeクラスメソッドを使用する」という方針に沿っています。私が知る限り、これは標準のRailsアソシエーションの使用を完全に防ぎます-基本的に次のような結果になります:
次のようなクラスメソッドが必要です。
アルバム内の写真の総数を表示するだけです。これは非常識なようです。デフォルトをオーバーライドするために、Railsの関連付け規則を破棄する必要はありません。with_exclusive_scopeは、インスタンスメソッド(保護されたメソッド)でも使用できません。これにより、少なくとも関連付けの類似性(photo_album.all_photos)を保持するために、「all_photos」というPhotoAlbumインスタンスメソッドを作成できます。しかし、いいえ、それは許可されていません:(
サイト全体で非常に役立つことが証明されているdefault_scopesを削除する以外に、デフォルトのスコープをオーバーライドしてRailsの関連付け構文を維持する方法を知っている人はいますか?
ありがとう!
編集:
私は、実際のdefault_scopeオーバーライドではありませんが、私のビューではるかに優れた構文を作成するPhotoAlbumインスタンスメソッドを追加することになりました。
これは正確にはARhas_manyアソシエーションではなく、純粋なSQLに依存していますが、これまでに見つけた中で最高の妥協案です。
ruby-on-rails - 場合によっては、default_scope が (update|delete|destroy)_all を破る
これはRails 3のバグだと思います。ここの誰かが私を正しい方向に導いてくれることを願っています。以下に掲載されているコードは、この問題を説明するためのものです。これで問題が混乱しないことを願っています。
Post モデルと Comment モデルがあるとします。投稿には has_many のコメントがあり、コメントは投稿に属しています。
Post モデルに default_scope を設定し、joins() と where() の関係を定義します。この場合、where() は joins() に依存しています。
通常、投稿はコメントに依存しません。繰り返しますが、簡単な例を挙げたいと思います。これは、where() が joins() に依存している場合に当てはまります。
次のコマンドを実行します。
次のクエリを生成し、最終的に ActiveRecord::StatementInvalid をスローします。
繰り返しますが、update_all、delete_all、destroy_all は同じように動作します。counter_cache を更新しようとしたときにアプリケーションが不平を言ったときに、この動作を発見しました。最終的に update_all にドリルダウンします。
ruby-on-rails - default_scope と関連付け
Post モデルと Comment モデルがあるとします。一般的なパターンを使用して、has_many コメントを投稿します。
コメントに default_scope が設定されている場合:
スコープに関係なく、投稿のすべてのコメントを簡単に取得するにはどうすればよいですか? これにより、無効な結果が生成されます。
次のクエリが生成されます。
それ以外の:
ランニング:
プロデュース:
既存のすべてのスコープを削除するスコープなしの基本原則は理解していますが、関連スコープを認識して保持する必要はありませんか?
すべてのコメントを取得する最良の方法は何ですか?