問題タブ [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.

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

ruby-on-rails - 名前付きスコープで奇数の数え間違いをページネーションします

私は最近、クエリを 4 つの名前付きスコープに分割して、再並べ替えを容易にし、それ以外の場合は常に正常に機能していたページ番号を付けますが、現在はページ数の計算に問題があります。

最後に paginate をスローして、そのように使用します...

たとえば、Paginate は、それぞれ 15 の 6 ページがあることを示しますが、4 ページに到達すると、5 ~ 6 ページが消えます...そして、5 または 6 に直接ジャンプしようとすると、それらは存在しません。

それを見て、私はページネーションが持っている問題に気づきました

でも

前者のために生成されるSQLは、後者よりも約8行短く、より多くの結果を返す原因となる私のSQL HAVING句を無視しています...

これを修正する方法についてのアイデアはありますか?

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

ruby-on-rails - 結合されたテーブルで named_scope を適切に機能させるにはどうすればよいですか?

これが私の状況です。pledges と pledge_transactions の 2 つのテーブルがあります。ユーザーが誓約を行うと、誓約テーブルには行しかありません。

後で誓約を履行するときが来たら、各支払いは私の pledge_transactions テーブルに記録されます。

すべてのオープンなプレッジを照会できるようにする必要があります。これは、トランザクション テーブル内の金額の合計がプレッジ額より少ないことを意味します。

これが私がこれまでに持っているものです:

余計でばかげた条件オプションを指定した理由を自問するかもしれません。答えは、ActiveRecord が条件で pledge_transactions テーブルを確認するように強制しない場合、それは完全に省略されます。つまり、having 句は無意味になります。

私の考えでは、ActiveRecord の欠点に遭遇したと思います。

最終的には、次のことができる必要があります。

  • Pledge.open
  • Pledge.open.count
  • Pledge.open.find(:all, ...)

この問題に対するよりエレガントな答えを持っている人はいますか? トランザクションが発生するたびにプレッジの amount_given フィールドを増やすという提案はしないでください。それは一時しのぎのアプローチのように感じます。私は、誓約が作成された後も静的に維持し、差額を計算する方がはるかに好きです。

ここで Rails を使用していなければ、ビューを作成するだけで済みます。

ありがとう!

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

activerecord - has_many と合計 named_scope

私はこの状況を持っています:

すべてのタスクが 0 時間以上残っているストーリーを見つけるには、名前付きスコープが必要です。

この投稿に基づいています。私はこれを書きました:

しかしStory.uncompleted、空の配列を返します。

手伝って頂けますか?

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

mysql - Rails:スコープをチェーンするときに結合をマージできますか?

クラス AI には 2 つのスコープ s1 と s2 があり、どちらもまったく同じ結合列を使用してテーブル T を結合します。

今、これを行うと失敗します:

エラー:

ActiveRecord::StatementInvalid: Mysql::Error: 一意でないテーブル/エイリアス: 'T'

私は、Railsがこれらの同一の結合について賢く、結合を一度だけ適用することを期待していましたが、そうではありません。テーブル エイリアスを使用することもできますが、正当な理由もなく 2 つの同一の結合が残ってしまいます。

これには適切な解決策が必要だと思いますか?

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

ruby-on-rails - 利用可能な言語を言語名に一致させる

サイトユーザーの編集/作成ページで言語選択ドロップダウンを作成したい。

この目的のために、私はもちろんサイトを複数の言語に翻訳しました。I18n.available_languagesを使用して、次のようなロケールコードの配列を取得できます。

さらに、言語モデルを作成し、それをユーザーに関連付けました。

言語テーブルには、次のように、ロケールコードと母国語の言語名が含まれます。

次に、User new、create、editアクションに次の割り当てがあります。

私はそのようにビューで使用します(コントローラーからの@available_languagesがパーシャルに渡されているため、'available_languages'はローカル変数です):

このすべての結果は、ユーザーが特定のユーザーのロケールを定義するためのロケール選択ドロップダウンを取得することです。

私の質問は次のとおりです。@available_languages割り当てをUsersControllerからLanguageモデルに移動するクリーンな方法があるので、これを短縮できます。

このようなものに:

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

sql - スコープを使用したデフォルトのモデル出力の基本的な変更

標準モデルの出力に小さな変更を加えるためだけに、同じことを何度も繰り返していることに気づきました。製品などに関する情報を格納する一連のテーブルと、そのすべてが価格を格納しています。価格は米ドルで保存されますが、出力は、ユーザーがセッションに保存したい通貨によって異なります。

例:

私が呼び出すときに出力を変更する簡単で堅牢な方法はありますか:

次のようなものを添付できます

また

Price 列のすべてのアイテムを単純に乗算しますか? named_scope はこれを行うことができますか?

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

sql - Rails名前付きスコープの問題

2 つの名前付きスコープがあります...どちらも別々に機能しますが、組み合わせると機能しません。

例:

名前付きスコープの合計は機能しますが、通貨は機能しません...

スコープという名前の通貨は機能しますが、合計は機能しません...

何か案は?

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

ruby-on-rails - ActiveRecord named_scope、.scopes

この問題の背景は非常に複雑で入り組んでおり、簡単な答えを探しているので、問題を説明する際にそれを脇に置き、代わりにこの仮説的な状況を提供します。

Automobile と呼ばれる単純な ActiveRecord モデルがあり、named_scopes が以下のようになっているとします。

私が呼び出す場合、スコープ自体を無視します。

これは正確に何を返すのでしょうか?コンソールに表示されるのは次のとおりです。

これは、キーと値の配列のように思えます。キーは名前付きスコープのシンボルであり、値は ActiveRecord の named_scope.rb ファイルを指す Proc です。

実際の名前付きスコープとして与えられたハッシュまたは Proc が必要な場合 (:classic の場合、「:conditions => { :build_date <= 1969 }」を受け取ることになります)、どうすればこれを見つけることができますか?

いくつかのnamed_scopeを条件付きでマージするプラグインを書いていますが、これに関して抵抗があります。現在、これらのスコープをマージするために以下を使用しています。

ここで行っていることの「正確さ」を無視して、named_scope に与えられた実際の Hash または Proc を取得できるより良い方法はありますか? この関数で「eval」を使用するのは好きではありません。実際に Hash または Proc を取得できれば、より強力なマージ ロジックを導入できるでしょう。これについての考えは大歓迎です。ありがとう。

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

ruby-on-rails - named_scopes と検索メソッドをテストするには?

proxy_options について知ったとき、それを使用してすべての名前付きスコープをテストし始めました。しかし、その後、条件ハッシュをモデルから直接コピーするだけで、結果の正確性を実際にテストしていないことに気付きました。

もう 1 つのアプローチは、肯定的な例と否定的な例を考え出し、それらが結果に含まれているかどうかを確認することです。

しかし、これは境界をチェックする良い仕事をしません。物事がより複雑になると、assert includes? の長いリスト全体が表示されます。予想される結果のセットを考え出し、それが一致することを確認するだけの方が良いようです:

ただし、指定した順序とは異なる順序で結果が返されると、テストが失敗する可能性があります。モデルに <=> を実装して、両方の配列をソートできると思います。しかし、それは本当に必要ではないようです。これらの種類の検索方法をテストするより良い方法はありますか? または、少なくとも一般的に受け入れられている正しい方法ですか?

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

ruby-on-rails - 名前付きスコープを再利用するにはどうすればよいですか?

こんにちは私はnamed_scope私のUserモデルに次のようにしています。

これを再利用する他の2つの名前付きスコープを作成したいと思います。

何をすべきか考えていますか?