Rails + ActiveRecord: как мне написать условие "один или оба не верны"? - PullRequest
0 голосов
/ 03 апреля 2019

В моей модели Listing, среди других столбцов у меня есть эти два:

- seller_currency
- bidder_currency

Значение listings.seller_currency и listings.bidder_currency может быть либо 1 (USD), либо 0(EUR).

Я пытаюсь получить все списки, где seller_currency и bidder_currency равны 0 (EUR) или хотя бы один из них 0 (EUR).

Есть ли лучший способ написать условие, чем это?

Listing.where('(seller_currency=0) OR (bidder_currency=0) OR (seller_currency=0 AND bidder_currency=0)')

Ответы [ 2 ]

3 голосов
/ 03 апреля 2019

Согласно вашему примеру, достаточно выполнить хотя бы одно условие.

Listing.where(seller_currency: 0).or(Listing.where(bidder_currency: 0))
0 голосов
/ 03 апреля 2019

Вам нужно только одно или условие, и оно охватывает случай, когда они оба равны 0. Этот способ предпочтительнее, поскольку это более быстрый запрос, поскольку он оценивает оба столбца одновременно.Кроме того, если вы хотите использовать переменные, вопросительный знак останавливает внедрение SQL.

Listing.where("(seller_currency=?) OR (bidder_currency=?)",0,0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...