Тестирование на членство в коллекции - PullRequest
0 голосов
/ 10 октября 2009

Если я знаю ответы current_user, потому что модель User имеет коллекцию answers:

current_user.answers

Как проверить, содержит ли эта коллекция answers текущий ответ (на который ссылается переменная класса @answer) на каждом шаге цикла?

Я испытал желание использовать include? Метод:

current_user.answers.include?(@answer)

но я вижу это для миксинов: (

Ответы [ 2 ]

3 голосов
/ 10 октября 2009

Лучше всего делать это в базе данных:

current_user.answers.exists?(@answer.id)

Это выполнит select id from answers where id = ? and user_id = ? и вернет true, если он существует.

Если у вас уже есть ответы, загруженные в память, include? должен сработать, или any?{|ans| ans.id == @answer.id}, или сгладить их все в набор идентификаторов вне цикла:

Set.new(current_user.answers.map(&:id)

, а затем проверьте наличие идентификатора внутри цикла.

1 голос
/ 10 октября 2009

Все перечисляемые коллекции (включая массивы, хэши и наборы) имеют метод include? для проверки членства.

[1,2,3].include? 2 # => true
{foo: 'foo', bar: 'bar'}.include? :foo # => true
[1,2,3].include? 5 # => false

(Есть также метод include?, который есть у модулей, но это не одно и то же.)

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