Carlos Brando

Nome do Jogo

Edge Rails: Bug no PostgreSQL e novos métodos para o DateTime

1939398332_4e856ea627.jpg

Bug ao adicionar colunas em banco de dados PostgreSQL

Havia um bug ao se usar o banco de dados PostgreSQL. O bug ocorria quando se criava uma migration para adicionar uma coluna em uma tabela já existente, veja um exemplo:

Arquivo: db/migrate/002_add_cost.rb

class AddCost < ActiveRecord::Migration
  def self.up
    add_column :items, :cost, :decimal, :precision => 6, :scale => 2
  end

  def self.down
    remove_column :items, :cost
  end
end

Note que estou criando uma coluna com :precision => 6 e :scale => 2. Agora é hora de rodar o ”rake db:migrate” e vamos ver como ficou nossa tabela no banco:

   Column     |          Type          | Modifiers
--------------+------------------------+-------------
 id           | integer                | not null
 descr        | character varying(255) |
 price        | numeric(5,2)           |
 cost         | numeric                |

Ops…Veja a coluna ”cost” que acabamos de criar… ela é um numeric comum, mas deveria ser uma coluna como a ”price”, logo acima dela, mais precisamente um numeric(6,2).

Bom, este erro já foi corrigido!

Novos métodos #utc, #utc? e #utc_offset para a classe DateTime

Outra alteração interessante para a nova versão. Para manter a compatibilidade (duck-typing) com a classe Time, três métodos novos foram adicionados à classe DateTime. Os métodos são #utc, #utc? e #utc_offset. Vamos ver um exemplo de uso de cada um:

>> date = DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24))
=> Mon, 21 Feb 2005 10:11:12 -0600
>> date.utc
=> Mon, 21 Feb 2005 16:11:12 +0000

>> DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24)).utc?
=> false
>> DateTime.civil(2005, 2, 21, 10, 11, 12, 0).utc?
=> true

>> DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24)).utc_offset
=> -21600

Comments