6

これを正しく書くにはどうすればよいでしょうか。

Request.pending.where(.....)  ## Request.pending = request.state_id in (1..3)

条件は次のとおりです。

approver1_id = current_user and state_id = 1
or
approver2_id = current_user and state_id = 2
or
approver3_id = current_user and state_id = 3

これらの条件を他のコントローラー/ビューでも使用できるようにモデルに配置できれば、非常に便利です。これらの条件は、アプリ全体で頻繁に使用するからです。

4

3 に答える 3

11

試す:

Request.pending.where(
  '(approver1_id= ? AND state_id= ?) OR
   (approver2_id= ? AND state_id= ?) OR
   (approver3_id= ? AND state_id= ?)',
  current_user.id,
  1,
  current_user.id,
  2,
  current_user.id,
  3
)

編集:コロンを使用する必要があることを忘れていました。そして、それは「current_user.id」であるべきではありませんか? また、リクエストが承認者1_idから承認者3_idまでの3つのパラメーターを使用するのか、リクエストごとに1つの承認者IDのみを使用するのかは不明です。

編集 2: クエリを SQL に変更しました。

于 2013-10-28T15:13:40.367 に答える
1

良い

最初にすべての state_id を取得し、配列に格納します。その配列をwhere句に渡します。Mysql INクエリに似ています。

したがって、クエリは次のようになります。

state_id = [1, 2, 3]  
Request.pending.where(:state_id => state_id AND :approved_id => current_user.id)

望ましい結果が得られることを願っています。

于 2013-10-28T15:27:10.227 に答える