А как выглядит код, в котором делается запрос на поиск? Вы проверяли, что возвращает Эластик? Возможно, его ответ где-то в коде фильтруется и возвращается последние 3 результата.
Антон Иванов: я делал отдельные гемы и подключал к проекту, методы из гема использовал в контроллерах. Если для API уже есть готовый гем, то можно сделать сервисы (Service Object из статьи) с более высоким уровнем абстракции и также вызывать их из контроллеров/моделей.
Антон Иванов: смотря какие. Для моделей есть concerns, для контроллеров обычно создают папку с названием контроллера и в ней создают классы (но вообще, контроллеры не должны быть толстыми, поэтому для них эта проблема не очень актуальна). Что-то лучше вынести в гем. Для путей вот в той статье есть решение. Ну и, конечно, нужно делать сервисы (подробнее здесь — blog.codeclimate.com/blog/2012/10/17/7-ways-to-dec... ).
Обычно всё, что не вписывается в модель-контроллер, кидают в lib, из-за чего эта папка разрастается, превращается в свалку и что-то там найти становится трудно (да и разобраться в найденном тоже не легко, т. к. часто это какие-то обрывки логики).
Руслан Галиев: Это можно сделать только если захостить сайт на S3 и включить редирект на какой-то файл в случае 404 ошибки. Но т. к., carrierwave работает с S3 по REST API, то там такого сделать нельзя.
"Фотография удалена" лучше хранить локально. Сделать какой-нибудь метод-обертку над image.url и проверять в нем ещё и image.file.exists?, если файл не существует, то возвращать урл на "Фотография удалена" и обнулять поле image. Обнулять нужно, чтобы сразу было видно, что файл с S3 удален и нужно вернуть локальный файл. Ну и ещё можно сделать проверку, что фотка создана более 3 месяцев назад (created_at в БД), чтобы лишний раз не делать запрос на S3.
Nith: Разобрался. В chained payments отправлять платежи можно только на подключенные к Пэйпалу аккаунты:
Unilateral payments can be used with simple or parallel payments that are implicit or preapproved. Unilateral payments are not designed to be used with chained payments or payments that require manual approval through the web flow. (инфа отсюда – https://developer.paypal.com/docs/classic/api/adap...
Nith: Понятно, значит это фича самого Пэйпала. К сожалению, не работал с его АПИ, но судя по документации, получатели обязательно должны быть зарегистрированы в Пэйпале.
Где вы нашли инфу о том, что можно переводить платежи на незарегистрированные в Пэйпале email'ы?
eldar_web: Ну я уже вроде рассказал, как делать: на любое действие пользователя записываем текущее время в колонку last_activity — это и будет время (условного) выхода пользователя.
eldar_web: тогда надо вести учет активности пользователя, на каждое действие устанавливать текущее время в колонку last_activity (например), время последней активности и можно будет считать временем выхода.
eldar_web: всё зависит от того, что надо делать в момент выхода пользователя. Если просто отслеживать активных в данный момент пользователей, то это лучше делать в Redis и юзать EXPIRE. Если что-то другое, то могут быть другие варианты.