私は3つのモデル製品、オプションとコメントがあります。製品には多くのオプションがあり、多くのコメントがあります。オプションは製品に属し、コメントは製品に属します。Ruby on Rails 5の複合スコープのクエリ
コメントモデル内のスコープを作成して、product_idがoptionモデル内のproduct_idと一致するすべてのコメントを取得し、コメントモデル内の属性「メッセージ」がオプションのいずれかであるかどうかを確認しますそのproduct_idに属しています。私は、製品変数をコメントモデルに渡すワーカーを持っています。
次のコードを使用して閉じることができますが、クエリの2番目の部分をハードコードする代わりに、動的にしたいと考えています。ここで
Comments.rb
scope :get_options, -> (product) { where(“comments.product_id = ? AND comments.message LIKE ?”), product.id, “Large Blue” }
、Large Blue
はオプションテーブル内の既存のオプションの一例です。
このスコープは、私が返そうとしているものをエミュレートしていますが、ハードコーディングする代わりに、その製品に属するオプションを呼び出したいと思います。
この問題に関するベストプラクティスのご協力をお待ちしております。 sqliteの
Comment.joins(product: :options).where("comments.product_id = ? AND comments.message LIKE '%' || options.title || '%'")
については
おかげ
を見ます製品に関連する...今あなたのゲームです –
私はあなたに答えを残しました。 'Product'、' Option'と 'Comment'フィールドと関連付けも貼り付けてください。 – AntonTkachov
特定のオプションまたはその属性の1つをスコープに渡して、そのオプションにその製品に関するコメントがあるかどうかを確認したいとしますか?または、製品に関連付けられたコメントのいずれかに、その製品に関連するオプションのいずれかのようなメッセージがあるかどうかを調べたいと思っていますか? – inveterateliterate