Сравнение Ruby, если эти 2 значения НЕ существуют - PullRequest
0 голосов
/ 05 марта 2011

Что я пытаюсь сделать
В моей модели я хочу выбрать только те элементы, которые НЕ равны (а или b).Так что я сделал это, которое работает.

# This works
select { | item | item.attribute != a}.select {| item | item.attribute != b}

Вопрос
Эта цепочка работает, но есть ли другой способ написать это?
Что происходитесли бы я хотел также проверить c и d?Могу ли я добавить куда-нибудь массив?
Я бы не стал цеплять, не так ли?

Контрольный вопрос
Линия select будет работать в моей модели, но когдаЯ пытаюсь вставить строку reject в мою модель, я получаю undefined method reject for #<Class>

class Model < ActiveRecord::Base

def self.foo
arr = [a,b]
reject { | item | arr.include?(item.attribute)}
end

end

Я предполагаю, что ActiveRecord не понимает reject?Есть ли в ActiveRecord метод, похожий на SQL NOT LIKE?

1 Ответ

2 голосов
/ 05 марта 2011

Мы скажем, что items - это ваш массив предметов, которые вы используете #select в.

arr = [a, b] # or [a, b, c, d]
items.reject { |item| arr.include?(item.attribute) }

Это отменяет ваш выбор в отклонении, но отклоняет элементы, равные (a или b).

...