Да, это возможно. Один из способов сделать это (что справедливо даже при недавних изменениях noexcept
) - использовать правила сужения конверсии C ++ 11:
A сужение преобразования представляет собой неявное преобразование [...] из целочисленного типа или неперечисленного типа перечисления в целочисленный тип, который не может представлять все значения исходного типа, за исключением случаев, когда источником является постоянное выражение, значение которого после того, как целые акции будут вписываться в тип цели.
blockquote>(акцент мой). Инициализация списка обычно запрещает сужение конверсий, и в сочетании с SFINAE мы можем создавать гаджеты для определения того, является ли произвольное выражение постоянным выражением:
// p() here could be anything template
std::true_type is_constexpr_impl(decltype(int{(p(), 0U)})); template std::false_type is_constexpr_impl(...); template using is_constexpr = decltype(is_constexpr_impl (0)); constexpr int f() { return 0; } int g() { return 0; } static_assert(is_constexpr
()); static_assert(!is_constexpr ()); Ключ здесь состоит в том, что
int{(expr, 0U)}
содержит сужение преобразования отunsigned int
доint
(и, следовательно, плохо сформировано), , еслиexpr
не является постоянным выражением, в в этом случае все выражение(expr, 0U)
является константным выражением, оцениваемое значение которого соответствует типуint
.
<забастовка> Это - то, для чего конструкторы! Переопределите метод модели initialize
.
Использование after_initialize
метод.
class Item < ActiveRecord::Base
def status
self[:status] or ACTIVE
end
before_save{ self.status ||= ACTIVE }
end
.123
вместо 0.123
.
– Martin Scharrer
2 May 2013 в 11:57
У парней Phusion есть некоторые хорошие плагин для этого.
Мы помещаем значения по умолчанию в базу данных посредством миграций (путем определения :default
опция на каждом определении столбца) и позволяем Активному Рекордному использованию эти значения для установки значения по умолчанию для каждого атрибута.
, по моему скромному мнению, этот подход выровненный принципов AR: соглашение по конфигурации, DRY, определение таблицы управляет моделью, не наоборот.
Примечание, что значения по умолчанию находятся все еще в приложении (Ruby) код, хотя не в модели, а в миграции (миграциях).
Note that I left out the end condition, to keep it simple. In real life, you kind of need one.
– dcaswell
17 October 2013 в 03:53
Хотя для установки значений по умолчанию в большинстве случаев это делать неудобно и непонятно, вы можете использовать :default_scope
. Посмотрите комментарий squil здесь.
Привет, ребята, в итоге я сделал следующее :
def after_initialize
self.extras||={}
self.other_stuff||="This stuff"
end
Прекрасно работает!