
[code]

    .where("(start_at = ?),(start_at > ?)", nil, Time.now)
    
[/code]

のような複数の条件を指定する時に、値にnilを指定したいのですが、うまくいかなくてつまづいています。また、このような場合に、条件句の中で、シンボルは使えますか？  
ご存知の方お助けくださいまし！


CC BY-SA 3.0
2016-09-10T09:08:57.673
28800
2016-12-04T00:20:56.107
17332
question
ruby-on-rails ruby
Rails4 where複数条件指定の際に、nilを指定したいんです！


where で文字列を使うなら、そのまま書けると思います。  
(手元に start_at を持っているデータが無かったので、created_at で試してみました。読み替えて下さいね)

[code]

    Hoge.where("created_at = ? OR created_at > ?", nil, Time.now).to_sql
    => "SELECT `development`.`hoges`.* FROM `development`.`hoges` WHERE (created_at = NULL OR created_at > '2016-09-10 11:52:17.331907')"
    
[/code]

ただ、文字列による直接のSQLは join や merge に弱いので、Arelで書いた方が良いこともあります。  
(煩雑になってしまいますが)

[code]

    [5] pry(main)> Hoge.where(Hoge.arel_table[:created_at].eq(nil).or(Hoge.arel_table[:created_at].gt(Time.now))).to_sql
    => "SELECT `development`.`hoges`.* FROM `development`.`hoges` WHERE (`development`.`hoges`.`created_at` IS NULL OR `development`.`hoges`.`created_at` > '2016-09-10 11:48:54.711053')"
    
[/code]

> 条件句の中で、シンボルは使えますか？

こちらの質問の意図が読み取れなかったのですが、「こんなイメージ」みたいなものはありますか？


CC BY-SA 3.0
2016-09-10T11:56:42.537
28804
2016-09-10T11:56:42.537
7471
28800
answer


ありがとうございます！！！下記のように書いたところ、思い通りに実装できました！

[code]

    where("starts_at is null or starts_at >= ?", now)
    
[/code]

シンボルを使いたかったのは、(rails4で)whereの条件句内で、nilを指定する場合、

[code]

    Hoge.where(starts_at: nil)
    
[/code]

とするとオブジェクトが返ってくるのですが、

[code]

    Hoge.where("(start_at = ?),(start_at > ?)", nil, Time.now)
    
[/code]

だとオブジェクトが返ってこなかったので、複数条件を指定する際にシンボルを使う方法はないかと探してました！


CC BY-SA 3.0
2016-09-10T13:19:06.493
28809
2016-09-10T13:19:06.493
17332
28800
answer