vladamir: try должен работать быстрее, чем инициализация нового объекта. Ruby mine советует не использовать несколько моделей и несколько методов модели, но реальность часто диктуает свои требования.
vladamir: нет, present? там не обязателен. Если @conversion == nil, то операция не будет выполнена. Но, возможно, будет лучше так @count_conversions = @conversion.try(:count_conversions).to_i . Такой код всегда вернет число, даже, если @conversion == nil.
Вадим: Если в вашу компанию пришли деньги, то они ведь не просто так пришли? Это может быть кредит, который вы взяли, или доход с продажи товаров и услуг, или прибыль от инвестиций. Желательно, чтобы счет отражал какую-то реальную область деятельности, а не абстрактную.
Вадим Шандринов: При вашем подходе у вас будет счет проекта А, счет проекта Б и т.д. - сколько проектов, столько и счетов. А потом вы захотите понять, сколько вы потратили на проекты и станет проблема. Как отличить проводку на «проектный счет», от проводки на «зарплатный»? Тогда вы начнете хранить еще тип проводки. Точнее два - для дебета и кредита. При общепринятом подходе счет отвечает за некую общую деятельность: «Доходы с продаж», или «Расходы на проекты». Дальше, с помощью аналики можно детализировать проводку, указав конкретный проект, или продажу, контрагента, да все, что угодно.
Вадим: нет, счета у вас всего 2. Допустим, капитал проекта (вы ведь из этих денег куда-то платите) и расходы на проект. Но в каждой транзакции, помимо этого счета, будет аналитика(колонки): Проект, банковский счет и т.п.
Посмотрите как сделан бухгалтерский учет в 1С ( в самой платформе, не обязательно в «бухгалтерии». Технология примерно такая - одна таблица для транзакций. В ней N колонок для дополнительной аналитики. При этом для каждого счета настраивается какого типа аналитика в какой колонке будет лежать.
Виктор Ablebeam: Мне читабельнее в одной строке. К таким фишкам в «ruby way» привыкаешь очень быстро и понимаешь, что читать такой код проще.
Инлайновые условия смотрятся очень красивое, если соблюдать стандарты написания кода - инлайновые условия использовать только для одной строки. Если строк стало больше, то писать обычным способом.