2014-03-28 3 views
4

Бизнес-логика: пользователь может создавать только одну запись для журнала в день. Прежде чем запись может быть создана, она должна запросить записи, чтобы определить, была ли запись уже создана на сегодняшний день.Как ограничить модель для создания одной записи в день?

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

+0

@vee Спасибо. Я просто добавил версию Rails. –

+0

Также укажите, что вы используете, потому что для Mongoid это будет другим. – zishe

+0

@zishe Спасибо. Я просто добавил ORM. –

ответ

6

Создать уникальный индекс на столе журнала:

add_index :journal_entries, [:user_id, :created_on], unique: true 

Тогда только одна запись с данной user_id и датой может быть создана и база данных будет вызывать исключение, если это нарушается. Обратите внимание, что created_on должен быть столбом date, а не datetime.

Это единственный способ сделать это на 100% уверенным, что вы не получите дубликатов без явной исключительной блокировки на столе.

+0

Это неправда, что это единственный способ 100%. Активный метод записи 'save' заключен в атомарную транзакцию, поэтому это может быть достигнуто и с простой проверкой. – BroiSatse

+2

@BroiSatse: Неправильно, транзакция не поможет вам вообще. Единственный путь - вставить логику в базу данных. –

+0

mu слишком коротка, не могли бы вы объяснить более подробно в «транзакции, которая вам совсем не помогает» – lngs

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