以下のようなSQLの内容を、railsのモデルで行いたいと考えています。
reservationsテーブルで、cartsテーブルをそれぞれのcart_idとidとでleft joinで結合し、
cartsのレコードが作成されてから5分間経過したものは、結合先の内容をnullにする、という条件を加えます。
SQL
1SELECT * 2FROM reservations AS r 3LEFT OUTER JOIN carts AS c 4ON r.cart_id = c.id AND c.create_date >= SUBTIME(NOW(), '00:05:00') 5WHERE r.id = 20
rails の Reservation モデルでは以下のように記述しました。
rb
1scope :getReservationStates, lambda { 2 select('*') 3 .joins('LEFT OUTER JOIN carts AS c ON lock_id = c.id AND c.create_date >= SUBTIME(NOW(), '00:05:00')') 4 .where('id = 20') 5 }
すると以下のエラーが出ます。
syntax error, unexpected tINTEGER, expecting ')'
...eate_date >= SUBTIME(NOW(), '00:05:00')')
... ^~ ^~
以下のように、SUBTIME(NOW(), '00:05:00')の部分をNOW()に変えるとうまくいきます。
rb
1scope :getReservationStates, lambda { 2 select('*') 3 .joins('LEFT OUTER JOIN carts AS c ON lock_id = c.id AND c.create_date >= NOW()') 4 .where('id = 20') 5 }
そもそもjoinメソッド内にこのような記述ができないのか、括弧が多すぎるのか、
それとも全くこの方法付では間違いなのか、お教えいただけますと幸いです。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/28 02:13 編集
2019/09/28 03:37
2019/09/28 03:48 編集