DBMS - PostgreSQL.Rails select - нежелательный автоматический тип
В контроллере:
@data = current_user.myitems.all(:select => 'record_date, count(record_date) as value', :group => 'record_date')
В свете:
<% @data.each do |item| -%>
<%= item.record_date.utc.strftime('%Y%m%d') %>
<% end -%>
Все работает отлично.
Но если изменить дату имя поля:
@data = current_user.myitems.all(:select => 'record_date as recdate, count(record_date) as value', :group => 'record_date')
<% @data.each do |item| -%>
<%= item.recdate.utc.strftime('%Y%m%d') %>
<% end -%>
Я получаю сообщение об ошибке:
undefined method `utc' for "2012-02-09 17:03:47":String
WTF ?? !! Я не приказывал набрасывать тип на строку !!!
Вы можете предложить не создавать псевдоним в строке SQL или определять псевдонимы в модели, но я не хочу менять модели для создания псевдонимов для столбцов, так как мне нужны псевдонимы только один раз и только для целей отображения. В методе контроллера есть «case», где представлены несколько заявлений выбора, , каждый со своими именами столбцов. Мне нужно, чтобы псевдонимы имели прочную точку зрения, без выражений «if».
Это была бы куча трэш, если я создам псевдонимы для каждого временного данных, в котором я нуждаюсь. Есть ли способ переименовать столбец в результирующем наборе ПОСЛЕ выбора? Или передать псевдонимы SELECT в качестве параметров? Я попробую ftype. – Paul
Я не понял, зачем вам эти псевдонимы? И некоторые метапрограммирования должны оставлять след небольшим. – Reactormonk
Давайте представим, что вы должны иметь несколько выборок в одном методе контроллера. Какое из них будет выполнено, зависит от входного параметра. Имена выходных столбцов должны быть одинаковыми для сохранения единого представления без инструкций CASE. – Paul