Rails - Как мне записать это строковое условие как условие массива - PullRequest
1 голос
/ 27 апреля 2010
named_scope :correct, :include => :correction, :conditions => "checked_at IS NOT NULL AND corrections.id IS NULL"

С другой стороны, я гуглял грузы и просматривал книги, но не могу найти список всех типов условий, которые вы можете использовать, и их различия при реализации их в виде строк, массивов или хэшей.

Есть ли где-нибудь список синтаксиса?

1 Ответ

4 голосов
/ 27 апреля 2010

Отправленная вами строка верна. Кроме того, нет возможности выразить одно и то же условие с помощью массивов или хэшей.

Array – синтаксис и Hash-синтаксис полезны, когда вам нужно интерполировать значения. Например, следующее условие

named_scope :is_one, :conditions => "field = '1'"

можно записать как

named_scope :is_one, :conditions => ["field = ?", "1"]

или

named_scope :is_one, :conditions => { :field => "1" }

Hash-синтаксис является подмножеством Array-синтаксиса и поддерживает только ограниченный набор операторов. Например, вы можете преобразовать

named_scope :is_one, :conditions => ["field1 = ? AND field2 IN (?)", "1", ["foo", "bar"]]

в

named_scope :is_one, :conditions => { :field1 => "1", :field2 => ["foo", "bar"] }

но нет хэш-эквивалента для

# OR
named_scope :is_one, :conditions => ["field1 = ? OR field2 IN (?)", "1", ["foo", "bar"]]
# <>
named_scope :is_one, :conditions => ["field1 <> ?", "1"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...