問題タブ [named-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 - 名前付きスコープを新しい名前付きスコープに結合する方法はありますか?
私は持っている
私は…したい
しかし、私はドライな方法でそれを行うことを好みます. を使用して同じ効果を得ることができます
しかし、それは特に素敵ではありません。
sql - named_scope に SQL をカプセル化する
named_scope 内で「find_by_sql」を使用する方法があるかどうか疑問に思っていました。カスタム SQL を named_scope として扱いたいので、既存の named_scopes にチェーンできます。また、頻繁に使用する SQL スニペットを最適化するのにも適しています。
ruby-on-rails - 結合を伴う Rails named_scopes
結合を使用する named_scope を作成しようとしていますが、生成された SQL は正しいように見えますが、結果はガベージです。例えば:
(クリップはシリーズによって所有され、シリーズはショーに属し、ショーは表示または非表示にすることができます)。
Clip.all は次のことを行います。
Clip.visible.all は次のことを行います。
これは問題ないようです。しかし、結果として得られる Clip モデルの配列には、データベースにない ID を持つ Clip が含まれます。代わりに、ショー ID が取得されます。どこが間違っていますか?
ruby-on-rails - ActiveRecord モデルから一般的な named_scopes を抽出する方法
複数の ActiveRecord モデルで再利用される named_scope があります。例えば:
このコードを抽出してモデル間で共有するためのベスト プラクティスは何ですか。それをモジュールに抽出することは可能ですか、それとも ActiveRecord::Base クラスを再度開く必要がありますか?
ruby-on-rails - scope_builder を使用して、Active Record モデルの search() メソッドで名前付きスコープを条件付きで構築する
Ryan Bates の優れたscope_builderを使用して、Active Record モデルの search() メソッドで使用する新しい名前付きスコープを条件付きで作成しています。
サンプル ドキュメントは、次のようなことができることを示しています。
しかし、モデルに上記のコードの関連バージョンを含め、いくつかのオプションを渡して search() を呼び出すと、返されるのは ScopeBuilder::Builder のインスタンスであり、チェーンされた名前付きスコープをオプションで実行した結果ではありません。私は合格しました、それは私が期待するものです。
私の質問は次のとおりです。ビルダーのインスタンスではなく、ビルダー(オプション)を実行した結果を取得するにはどうすればよいですか?
ruby-on-rails - 名前付きスコープ内の要素のIDを取得します
Ruby on Railsでは、すべてのメソッドがメソッドとhas_many :widgets
メソッドの両方を生成します。object.widgets
object.widget_ids
後者の方法は、ActiveRecordオブジェクトの作成をバイパスし、はるかに高速なクエリを実行するため、非常に便利です。このオプションを使用するとクエリ速度を向上させることができます:select
が、Rubyは、整数の代わりにオブジェクトを生成するときに、より多くのメモリを割り当てます。
例えば
(結果セットは67353オブジェクトです)
named_scopesを使用するときに同じ動作を発生させる方法はありますか?
例えば、
現在、名前付きスコープの結果セットでオブジェクトのIDを取得する方法は、HistoricalSession.recent.map(&:id)です。これは、上記の後者の例で行われていることと本質的に類似しており、明らかに効率的ではありません。最終的に必要なのはIDの配列だけであるのに、HistoricalSessionオブジェクト全体を構築したくありません。
別の実装は、新しい.findメソッドである可能性があります。たとえば、HistoricalSession.recent.find_attributes(:id)です。このメソッドは、selectステートメントを置き換えて、指定された値のみを選択し、ActiveRecordオブジェクトの作成を短絡して配列を返すだけです。
助言がありますか?これは簡単なプラグインでしょうか?
ruby-on-rails - named_scope の可変フィールド名?
Rails モデルで、start_date と end_date でフィルタリングする named_scope を達成しようとしています。かんたんだよ。しかし、私は多くの異なる分野で多くの機会にそれをしなければなりません.
これはトラブルを求めていますか?もしそうなら、なぜ(SQLインジェクション?)これを達成する別の方法がありますか。
編集:使用されるソリューション
私が行ったEggdropの考え方を使用して:
これで、本質的に同じスコープを何度も書き直すことなく、日付範囲でフィルタリングしたいフィールドに named_scope を再利用でき、フィールド名をホワイトリストに登録して、コードがユーザーに公開された場合に列名をいじったり、トリッキーな SQL インジェクションを回避したりできます。今後のインプット。
ruby-on-rails - named_scope の難しい状況
私のアプリケーションでは、ユーザーはディスカッションを開始して参加できます。ディスカッションにタグを付けることもできます。その場合、タグの名前を含むタグが作成され (まだ存在しない場合)、どのユーザーがどのディスカッションにどのタグでタグ付けしたかを記憶するタグ付けも作成されます。
したがって、ディスカッション モデル内には次のようなものがあります。
1 人のユーザーからディスカッションのすべてのタグを取得する簡単な方法を作成しようとしています。理想的には、named_scopes を慎重に使用して、物事を適切かつクリーンに保つ必要があります。私はそれが次のように見えるべきだと思います:
Tag クラス内にこの named_scope を記述することは、非常に困難であることが判明しています。それはどのように見えるべきですか?何らかの方法でタグ付けテーブルと結合する必要がありますか?
ruby-on-rails - :join で使用すると、named_scope は新しいオブジェクトを作成しています
免責事項: 私が最初に Ruby on Rails に触れたのは文字通り何年も前のことであり、それを再び取り上げている今、非常に多くのことが私にとって新しいことです。これらの 1 つが名前付きスコープです。素晴らしいようですが、期待した結果が得られません。たとえば、次のようになります。
私の理解では、
を行うのとまったく同じでなければなりません
しかし、代わりに、別のオブジェクトを取得しています。デモンストレーションするには:
だから私の質問は、この新しいオブジェクトは一体どこから来たのか、named_scope を取得して元のオブジェクトを取得するにはどうすればよいのかということです。
ruby-on-rails - パラメータ付きのファインダ メソッドを関連付けに変更する
これを has_one 関連付けにするにはどうすればよいですか?
(おそらく has_one + サイズの名前付きスコープ。)
編集: Freenode #rubyonrails の AnalogHole からヒントを得て、これを行うことができます。
...これはかなりクールで、少なくとも構文が少し良くなります。
ただし、これはまだ私が望むほどうまく動作しません。特に、それ以上のナイス検索連鎖は許可されません (すべての条件を取得するまでこの検索を実行しないなど)。
さらに重要なことは、:include での使用が許可されていないことです。理想的には、次のようなことをしたい:
...投稿と一緒にアセットをキャッシュできるようにします。または、実際にはそれらをまったくキャッシュします-たとえばget_cache(user_id){User.find(user_id, :include => :avatar_assets)}
、最初のパスとしては良いでしょう。
これは実際には機能しませんが (self == User)、精神的には正しいです:
( Refactor My Codeにも投稿されています。)