質問編集履歴

1 中間テーブルの説明

shun4shun3

shun4shun3 score 4

2016/11/25 00:57  投稿

Rails SQLでモデルをうまく検索できない。AND検索がしたい
###前提・実現したいこと
Ruby on Railsでメッセージアプリを作っています
モデルの検索から、条件に応じてモデルを操作したいのですが、
モデルの検索が上手くできません。
 
Conversation, User は中間テーブルを通して多対多の関係です。  
```ruby
Conversation.joins(:users).where(users: {id: [current_user.id,params[:friend_id].to_i]})
```
"{id:.."のところ、 []でくくってしまうと、OR検索になってしまい、current_user.id,friend_id のどちらかがあれば if 以下が実行されてしまいます。
そうではなく、**AND検索で、current_user.id,params[:friend_id] のどちらも入ったconversation を取り出したいです。**
###該当のソースコード
```ruby
class ConversationsController < ApplicationController
 def find_or_new_conv
   if q = Conversation.joins(:users).where(users: {id: [current_user.id,params[:friend_id].to_i]})
     redirect_to action: :show, id: q.id
   else
     con = Conversation.create
     con.users << current_user
     con.users << User.find(params[:friend_id].to_i)
     redirect_to action: :show, id: con.id
   end
 end
```
###試したこと
```ruby
Conversation.joins(:users).where(users: {id:current_user.id}).where(users: {id:params[:friend_id].to_i]})
```
とすれば、AND検索ができるはずですが、空の配列が返ってきてしまいます。
###補足情報(言語/FW/ツール等のバージョンなど)
Rails 5.0.0.1
  • Ruby

    9654 questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    9057 questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • SQL

    3080 questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る