В ответе @ miguel-savignano есть опечатка. По словам Stackoverflow, «очередь редактирования заполнена», поэтому я не отправил изменения.
Правильный синтаксис:
Username.or({username: @username}).or({email: @email})
Более сжатое решение:
Username.or({username: @username}, {email: @email})
Монгольский селектор разрешит:
{"$or"=>[{"username"=>@username}, {"email"=>@email}]}
Я нашел этот вопрос, как я пытался решить для создания «или» запросов.
Если вы хотите совместить строку или любой из массива элементов, вам нужно будет написать запрос Mongoid с помощью селектора Mongo '$ in'.
Например, у вас есть определенное имя пользователя и массив писем. Вы хотели бы вернуть все результаты, по крайней мере, одно из полей соответствует либо имени пользователя, либо одному из писем внутри массива.
@username = "jess"
@emails = ["hi@mail.com", "test@mail.com", "foo@mail.com"]
User.or({username: ""}, {email: {'$in': @emails}})
Монгольский селектор разрешит:
{"$or"=>[{"first_name"=>""}, {"email"=>{:$in=>["hi@mail.com", "test@mail.com", "foo@mail.com"]}}]}
Users
с 2 из 3 писем в вашей базе данных, селектор будет верните счет 2. User
с username
«jess» и 3 дополнительных Users
, каждый из которых имеет одно из заданных сообщений, тогда селектор вернет счетчик 4. Чтобы решить эту проблему, вам нужно внести изменения в пакет response-native-navigation. Откройте файл NavigationActivity.java и замените следующий код на новый:
Замените этот код:
@Override
public void invokeDefaultOnBackPressed() {
if (!navigator.handleBack(new CommandListenerAdapter())) {
super.onBackPressed();
}
}
На этот:
@Override
public void invokeDefaultOnBackPressed() {
if (!navigator.handleBack(new CommandListenerAdapter())) {
this.moveTaskToBack(true);
//super.onBackPressed();
}
}
После сохранения изменений проверьте на устройстве Android.