2015-04-16 3 views
-1

Пользователь has_many операции. Как найти Users и что с ним можно найти: User.operations.last.exp_date>CurrentDate?Ruby on Rails находит записи через последние записи ассоциации

+0

вы можете попробовать это 'User.operations.where (" EXP_DATE> # {CurrentDate}) является CurrentDate является переменной? –

+2

Просьба уточнить, что именно вам нужно, и показать нам, что вы пробовали до сих пор. – fivedigit

+0

В оригинал Мне нужно найти пользователей с последней операцией, которая была более 10 дней. Операции сортируются по create_at, поэтому я думаю, что мне нужно проверить последнюю операцию каждого пользователя. Но я не знаю, как лучше всего писать запрос. –

ответ

2

я буду считать, что операции упорядочены по дате в любом случае, это означает, когда новая операция вставляется не будет старше уже вставленной записи, если так это будет работать очень легко.

User.joins(:operations) 
    .merge(
    Operation.where('exp_date > ?', Date.today) 
) 
+0

irb (main): 067: 0> BonusCard.joins (: bonus_card_operations) .merge (BonusCardOperation.where (вал ue: 100)) PG :: InFailedSqlTransaction: ERROR: текущая транзакция прерывается, команды игнорируются до конца транзакционного блока : SELECT "bonus_cards". * FROM "bonus_cards" INNER JOIN "bonus_card_operations" ON "bonus_card_operations". "bonus_card_id" = "bonus_cards". "id" AND (bonus_card_operations.tenant_id = 11) WHERE (bonus_cards.tenant_id = 11) AND (bonus_card_operations.tenant_id = 11) И "bonus_card_operations". "value" = $ 1 –

+0

спасибо за ваш пример, я поймите свою идею. Да, мои записи упорядочены по дате. Но у меня была ошибка ( –

+0

Я не знаю, если это проблема с 'merge' и postgres или что, но в этом специальном случае запрос прост, вы можете сделать BonusCard.joins (: bonus_card_operations) .where (bonus_card_operations: {значение: 100}) ', проверьте, работает ли это –

0

вы можете сделать это,

user.operations.where("exp_date > ?", CurrentDate) 
+0

это будет do: undefined method 'operations 'для #

+0

его задает эту проблему, потому что у вас нет пользовательского объекта. Сначала найдите пользовательский объект пользователем = User.find (user_id) –

Смежные вопросы