Я хочу знать, как проверить, существует ли элемент массива внутри массива MongoMapper. This question является самым близким, который я мог найти, но он обрабатывает запросы, а не просто использует документ, который у вас уже есть.Как вы называете "содержит?" на массиве MongoMapper в Rails 3?
Моя модель пользователя содержит строку
key :roles, Array
массива «ролей», содержит такие строки, как «администратор» или «пользователь». Для авторизации мне нужно вызвать что-то вроде следующего метода на экземпляр пользователя:
if user.roles.contains?('admin')
# Do administrative stuff.
end
Но когда я пытаюсь позвонить 'contains?' Рубин жалуется, что нет такого метода: «? Содержит»
NoMethodError (undefined method `contains?' for #<Array:0x007fc845cd8948>):
app/models/ability.rb:11:in `initialize'
app/controllers/settings_controller.rb:5:in `index'
Если нет никакого способа сделать это, то как я могу преобразовать массив в массив рубинового позвонить? Вызов to_a не делает этого:
if user.roles.to_a.contains?('admin') # etc...
Я использую Rails 3.2.13, Ruby-1.9.3-p392 и MongoMapper 0.12.0 на Mountain Lion.
Я незнаком с MongoDB, так это предложение noobish. Что возвращает 'user.roles'? – jason328
Ответ: ... В массивах Ruby нет метода 'contains? '. Он называется 'include? '. Sigh ... –
@ jason328 Он возвращал '#'. Во всяком случае, глупая ошибка с моей стороны не знать правильного имени метода. –