問題タブ [finder-sql]
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 - has_many :finder_sql パラメータに文字列を渡すにはどうすればよいですか?
私のアプリケーションでは、ユーザーは has_many チケットを持っています。残念ながら、チケット テーブルには user_id がなく、user_login があります (レガシー データベースです)。いつか変更する予定ですが、今のところ、この変更には多くの影響があります。
では、ログイン列を介して「user has_many :tickets」関連付けを作成するにはどうすればよいでしょうか?
次の finder_sql を試しましたが、うまくいきません。
奇妙なエラーが発生します:
このfinder_sqlも試しました(ログインを二重引用符で囲みます):
しかし、それは同じように失敗します (とにかく、それが機能したとしても、SQL インジェクションに対して脆弱です)。
テスト データベースで、チケット テーブルに user_id 列を追加し、次の finder_sql を試しました。
これで問題なく動作します。どうやら、私の問題は、使用しようとしているユーザー列がIDではなく文字列であるという事実に関係しています。
かなり長い間ネットを検索しました...しかし、手がかりは見つかりませんでした。
任意のパラメーターを finder_sql に渡して、次のように記述できるようにしたいと考えています。
編集: has_many 関連付けの :foreign_key パラメータを使用できません。ユーザー テーブルには、アプリケーションの他の場所で使用される id 主キー列があるためです。
編集#2:ドキュメントを十分に読んでいないようです.has_many関連付けは、:primary_keyパラメーターを使用して、ローカルの主キー(デフォルトID)である列を指定できます。ダニエル、目を開けてくれてありがとう!私はそれが私の元の質問に答えていると思います:
しかし、 has_many :tickets_since_subscription 関連付けを機能させる方法を知りたいです。
sql - Railsfind_by_sql-一般的なクエリを実行する方法
このクエリを実行して、MySQLが特定のテーブルに使用する次のauto_increment値を見つける必要があります。
この特定のクエリを呼び出す方法は?これは、モデルのオブジェクトを含むサイズ1の配列を返すことで呼び出すすべてのモデルで機能します。編集:オブジェクトには、必要に応じてauto_increment値を含むattributesという名前のハッシュが含まれています。
そのような一般的なクエリを実行する他の方法はありますか?find_by_sqlを使用するアプローチ全体を変更して、元の問題も解決できるかどうかを知りたい。
ruby-on-rails - Rails3:デフォルトの条件をhas_manyに設定する方法
私は箱とボールを持っています。ボールは箱に入っています。ボールは赤と緑のどちらでもかまいません。
has_manyを緑色のボールだけで設定したい。finder_sqlメソッドが存在することは知っていますが、スコープを介して設定する方法がわかりません。
次の例を同等にしたいと思います。
ruby-on-rails - finder_sqlはRailsで文字列を解析しません
使用するクエリfinder_sql
がPostgreSQLに渡される前に正しく解析されず、データベース構文エラーが発生するという問題があります。
問題を説明するために、ここからサンプルコードを使用しました。
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
人物モデルがないので変更class_name
しただけですが、ここでは関係ありません。"User"
これを使用すると、次のエラーが発生します。
ご覧のとおり#{id}
、オブジェクトのIDに置き換えられていないため、PostgreSQLエラーが発生します。
環境
- レール3.1
- rvm
- PostgreSQL 9.1
- Ubuntu 11.10
- Ruby 1.9.2p290(2011-07-09リビジョン32553)[x86_64-linux]
activerecord - ActiveRecord を使用して、STI テーブルのさまざまなクラスを単一の結果セットに結合する方法は?
Facebook のグループ ページに似たグループ ページを作成するアプリケーションを作成しています。誰かがページに投稿することができ、その投稿には返信があります。これらは非常に類似したプロパティを持っているため、投稿と返信は同じ STI テーブルに結合されます。
手に入れたいですpage.posts_and_replies
ページの「最も気に入った投稿または返信」などを見つけるには、投稿と返信を組み合わせて、次のような結果セットを取得する必要があります。
投稿と返信を一緒に出すのは難しい
単一の結果セットとして並べ替えるposts_and_replies
には、通常は単一の結合に基づいてクエリを実行する必要があります。
page_id
にしか存在しないため、これを行うことはできませんposts
。「返信」は、それらが属する投稿を通じてのみページを参照します。したがって、この結合は投稿を提供しますが、返信は提供しません。
可能な解決策:
データを非正規化します...
Reply と Post にを複製することもできpage_id
ますが、非正規化されたデータは涙で終わる傾向があるため、可能であればそれを避けたいと思います。
カスタムを使用するfinder_sql
カスタム finder sql を使用して、投稿と返信を別々に取得し、それらを結合することができます。
カスタム finder_sql は機能しますが、関連付け拡張では機能しません
上記の finder_sql は実際には機能しますが、関連拡張機能はどれも機能しません。関連拡張機能 ( など.where
) を使用しようとすると、組み込みの finder_sql にフォールバックします。
これは機能します
*ただし、これは誤った finder_sql にフォールバックします*
何らかの理由で、関連付け拡張機能が正しいfinder_sql
アソシエーション拡張機能が指定された finder_sql を尊重するようにするにはどうすればよいですか?
問題は、finder_sql を適切に使用していない関連付け拡張機能に要約されているようです。これを強制する方法はありますか?
ruby-on-rails - カスタムfinder_sqlを使用してオブジェクトに関連付け拡張機能を使用できますか?
ActiveRecordのオプションは、たとえば次のような無料のアソシエーションcustom_finder
拡張機能を利用できることを意味しているという印象を受けました。.where
.order
'finder_sql'は非常に些細なことですが、要点を示しているため、これは良い例ではありません。
生成されたSQL
私は次のことを期待します
引き起こす
つまり、カスタムfinder_sql+where句
ただし、実際に生成されるのは
つまり、習慣を完全に無視しfinder_sql
、ノミを現在の犬に参加させようとします。
カスタムfinder_sql
がアソシエーション拡張機能にそれを尊重させない場合、その中のポイントは何ですか-それは単にオブジェクトのメソッドである可能性があります...
r - R 2.15.2 Win7 OS の sqlFetch() が R セッションを終了する
sqlFetch()
Win7 OS のR 2.15.2が R セッションを終了しています。ただし、sqlQuery()
関数は終了すると値を適切に返します。問題の解決を手伝ってください。
ruby-on-rails - Rspec/Rails: has_many with finder_sql 条件のテストを書く
これが私のhas_many
声明です:
これは私の Rspec テストです (失敗しています)。上記のテストを書く方法はありますか?has_many
これをインスタンス メソッドに変換してそれに対してテストすることもできますが、これにスコープを持たせようとしていました。
ruby-on-rails - 複雑な has_many 関係を Rails > 4.1 に移植 (finder_sql なし)
Rails アプリを Rails 4.2 に移植しています。このRailsアプリには、関連付けにかなり複雑な手動のSQLコードが含まれています。一部はDBの最適化(JOINの代わりにサブセレクトなど)が原因で、一部は執筆時点(Rails 3.0)で実行可能な代替手段がないため、一部は確実に知識不足(少なくとも、それは簡単に解決できることを願っています)。
例: InternalMessage クラス。メッセージはユーザー間で送信でき (InternalMessage の受信者、およびメッセージの「削除」は、InternalMessagesRecipients に保存されます。これは、複数存在する可能性があるためです)、読み取り、返信、転送、および削除が可能です。関連付けは次のようになります。
重要な部分は最後の "OR" 句です。この関連付けにより、受信メッセージと送信メッセージの両方を取得し、ユーザー テーブルと個別に結合します。
InternalMessage には複数の受信者がいる可能性があるため (また、送信者自身に送信することもできます)。
finder_sql
Q: これを Rails 4.2 互換のhas_many
定義に移植するにはどうすればよいですか?