Últimos Artigos:

Rss Feeds

Rails Summit: Meu emprego foi para os EUA

Por Carlos Brando em 09 de Outubro de 2008 | 15 comentários

“MY JOB WENT TO USA (And All I Got Was This Lousy Presentation)”

Este é o tema da palestra que estarei realizado no Rails Summit Latin America, no dia 15 de outubro às 15:30. É uma brincadeira com o título do famoso livro de Chad Fowler, que também estará presente no evento.

A palestra será dividida em duas partes. A primeira será uma apresentação baseada nos atos, impensados ou não, que me levaram a conseguir meu emprego na Surgeworks, Inc., uma consultoria americana. Relembrando o caminho que percorri e analisando dicas do livro que da nome a esta palestra, vou contar como consegui este emprego mesmo sem nenhuma experiência profissional com Rails na época.

A segunda parte desta apresentação será uma sessão de perguntas e respostas com toda a equipe de desenvolvedores brasileiros da Surgeworks. Também contará com a participação de Carl Youngblood, que está do outro lado do negócio, sendo ele um contratador.

Qualquer um que tenha interesse em trabalhar para uma empresa de fora do Brasil, presencial ou remotamente, não pode perder esta apresentação. Esta é a chance de tirar todas as suas dúvidas sobre este tipo de trabalho.


Você já tem uma pergunta ou dúvida em mente? Então me ajude a preparar esta palestra deixando sua dúvida nos comentários. Também não deixe de participar com suas perguntas no dia do evento.

Rails Podcast Brasil - Episódio 33

Por Carlos Brando em 08 de Outubro de 2008 | 14 comentários

Estamos a uma semana do Rails Summit Latin America! E você já está no clima?

No podcast desta semana falamos sobre o Ruby In Steel, um plugin que torna o Visual Studio uma ferramenta poderosa para desenvolvedores Ruby. Também falamos sobre o Tog, uma coleção de plugins para redes sociais, muito interessante. Outros assuntos abordados: SEO, PassiveRecord, RubyGems, Git e JRuby.

Neste episódio

Download: Episódio #33
iTunes: http://podcast.rubyonrails.pro.br/rss
Episódios anteriores: http://podcast.rubyonrails.pro.br

“Rails 2.1 - Que hay de nuevo?” - 1000 downloads

Por Carlos Brando em 07 de Outubro de 2008 | deixe um comentário

Gaston Ramos, o responsável pela tradução do meu livro para espanhol acabou de me avisar que hoje foi feito o milésimo download da versão em espanhol do livro. Fico muito feliz de ver que o trabalho de criar o livro valeu a pena.

A versão em inglês, teve à partir do meu site mais de 30.000 downloads e a versão em português tem neste momento 3.568 downloads registrados.

Parabéns Gaston e todos os envolvidos no projeto de tradução! E obrigado a todos os que colaboraram com a tradução do livro para inglês e especialmente ao Marcos Tapajós e ao Bruno Miranda que ajudaram na montagem e revisão do livro.

Edge Rails: Mais um finder dinâmico

Por Carlos Brando em 07 de Outubro de 2008 | 2 comentários

Aumentando o número de finders dinâmicos do ActiveRecord, agora temos o find_last_by. Já tinhamos os famosos find_by e o find_all_by.

Além de simplificar, ficou muito mais elegante recuperar o último comentário feito por um usuário, por exemplo. Veja:

Comment.find_last_by_author("Carlos Brando")

Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.

Edge Rails: Benchmarking reports em milisegundos

Por Carlos Brando em 06 de Outubro de 2008 | deixe um comentário

Todas as mensagens de log que continham uma indicação do tempo que determinado processo levou para ser executado, foram alteradas para exibir o tempo em milisegundos.

Por exemplo, a mensagem:

Completed in 0.10000 (4 reqs/sec) | Rendering: 0.04000 (40%) | DB: 0.00400 (4%) | 200 OK [http://example.com]

Agora será exibida da seguinte forma:

Completed in 100ms (View: 40, DB: 4) | 200 OK [http://example.com]

Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.

Edge Rails: Novo método each_with_object

Por Carlos Brando em 03 de Outubro de 2008 | 3 comentários

O método each_with_object do Ruby 1.9 foi adicionado ao Rails, caso você ainda não esteja usando a nova versão do Ruby. Este método é bem interessante, pois ele funciona como o conhecido método each, com um pequeno diferencial. Cada iteração além de receber um elemento da coleção, recebe também um objeto que chamamos de memo.

Por exemplo, vamos dizer que eu pretenda preencher um hash com valores de uma coleção:

%w(first second third).each_with_object({}) do |str, hash|
  hash[str.to_sym] = str
end
# => {:second=>"second", :first=>"first", :third=>"third"}

Note que no exemplo acima o memo é um hash vazio ({}). Dentro do bloco eu preencho este hash com os itens da minha coleção.

Apenas um alerta: Não podemos usar objetos imutáveis como memo, tais como números, true e false. No exemplo abaixo o retorno sempre será 1, já que o número um não pode ser alterado:

(1..5).each_with_object(1) { |value, memo| memo *= value } # => 1

Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.

Se você tiver dois modelos: Post e Comment. Onde Post tem muitos (has_many) comentários. Se você executar:

Post.first.comment_ids

O Rails usará a seguinte query para recuperar os ids:

SELECT * FROM `comments` WHERE (`comments`.post_id = 1)

Mas neste caso, não precisamos dos objetos inteiros. A seguinte query seria mais do que suficiente para o funcionamento deste método, além de possuir uma performance melhor:

SELECT `comments`.id FROM `comments` WHERE (`comments`.post_id = 1)

Tanto para associações has_many, como para associações has_many :through o código foi alterado para incluir esta melhora de performance a partir do Rails 2.2.


Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.

Falta menos de uma semana para o inicio do curso “Ruby on Rails 2 do básico ao avançado“.

Este curso online foi feito para programadores que desejam aprender essa nova plataforma de desenvolvimento Web e para programadores que conhecem Rails e desejam expandir seus conhecimentos em áreas mais avançadas que ainda não usam.

Durante o curso os participantes terão acesso a aulas práticas e teóricas, com conteúdos em forma de textos didáticos, imagens e aulas interativas. Para cada aula didática teremos uma aula interativa, sempre no dia posterior, em um ambiente real de treinamento, com áudio, vídeo, chat e outros recursos para maior interatividade entre os participantes e instrutor. Nesta aula serão apresentados casos reais de desenvolvimento do dia a dia e correção dos exercícios propostos, além de tira-dúvidas.

O aluno ainda contará com um grupo de estudos para troca de experiências durante o curso em tempo integral, servindo também como um ponto de apoio ao aprendizado.

O investimento é de apenas 2 x R$270,00, que representa um valor muito baixo em relação ao conteúdo do curso. Todo o material do curso é o mesmo das turmas anteriores que foram ministrados por Júlio Monteiro e Fábio Akita, mas totalmente atualizado para a versão atual do Rails e com algumas dicas do que teremos de novo no Rails 2.2.

Ainda restam poucas vagas, então aproveite e aprenda Ruby on Rails ainda este ano. Clique aqui para se matricular.

Shoulda 2.0

Por Carlos Brando em 01 de Outubro de 2008 | deixe um comentário

Outro projeto open-source que também participo e gosto muito é o Shoulda. Já tentei explicar no passado o motivo de gostar tanto deste projeto, mas acho que tem muito a ver com uma questão de puro gosto.

Pois bem, acabou de ser liberada a versão 2.0.2 do Shoulda e a principal novidade é que agora ele funciona 100% como um gem. Além disso, novas macros foram acrescentadas, bugs foram corrigidos e algumas funcionalidades foram removidas.

Para utilizar o Shoulda em seu projeto Rails 2.1+ a melhor forma é acrescentar o seguinte código no seu arquivo config/environment.rb:

Rails::Initializer.run do |config|
  config.gem 'thoughtbot-shoulda', :lib => 'shoulda/rails',
    :source => "http://gems.github.com"
end

Depois basta executar no terminal:

rake gems:install
rake gems:unpack

Entre as novidades, tivemos melhorias em macros existentes que prometem agilizar ainda mais a criação de testes, tais como o acréscimo das opções :equals e :class na macro should_assign_to. Com estas novas implementações fica fácil testar se o objeto devolvido é do tipo desejado ou mesmo igual a um objeto especifico.

should_assign_to :user, :equals => "@user", :class => User

A macro should_have_one também recebeu a opção :dependent:

should_have_one :address, :dependent => :destroy

Agora falando apenas de novidades, temos as novas macros should_change, should_not_change, should_filter_params, should_render_with_layout, should_render_without_layout, should_route, should_respond_with_content_type, should_return_from_session e o muito útil before_should.

Mais detalhes sobre o funcionamento de todas estas macros podem ser encontrados na documentação do projeto.

Algo interessante que também foi acrescentado ao projeto é a carga automática de macros customizadas. Caso você deseje criar suas próprias macros, basta criar uma pasta RAILS_ROOT/test/shoulda_macros e jogar lá dentro os arquivos com estas macros.

Gems e plugins também podem se beneficiar dessa vantagem. Se em qualquer um deles houver uma pasta shoulda_macros na raiz, todos os arquivos dentro da pasta também serão carregados automaticamente.

A única controvérsia desta versão, foi a remoção do método should_be_restful. Na verdade ele chegou a ser removido por alguns dias, mas depois voltou com uma mensagem de alerta avisando que em breve ele será removido definitivamente. Isto se dá pelo fato de que este método faz muita coisa de forma automática e não permite uma fácil localização do ponto onde um erro ocorre.

Um outro projeto também foi iniciado em paralelo ao desenvolvimento do Shoulda. O Woulda promete ser um repositório de macros e recursos que não cabem ao Shoulda, como macros especificas para testar alguns gems/plugins famosos.

Para quem está começando a brincar com o Shoulda segue uma lista de recursos interessantes:

O Bundle para o TextMate que estou mantendo junto com o Dr. Nic no GitHub já está atualizado com todos os recursos da versão 2.0.2.

Rails Podcast Brasil - Episódio 32

Por Carlos Brando em 30 de Setembro de 2008 | 16 comentários

Depois de uma temporada de seca e um episódio solo, estamos de volta com o Rails Podcast Brasil. Neste episódio decidimos testar um novo formato, com apenas as noticias mais relevantes para o mundo do Rails.

Um episódio menor, mais direto e informativo. Acreditamos que nossos ouvintes procuram no podcast uma forma rápida de se manter atualizados com a plataforma de desenvolvimento que escolheram.

O podcast desta semana tem aproximadamente 20 minutos de duração, e cobre as principais noticias da última semana, que você não poderia deixar de saber.

Gostaria de ouvir de nossos ouvintes o que acharam deste formato nos comentários.

E não se esqueça, o curso de Ruby on Rails já está para começar, se você ainda não se matriculou, já está na hora. O Rails Summit Latin America também está muito próximo, não perca.

Download: Episódio #32
iTunes: http://podcast.rubyonrails.pro.br/rss
Episódios anteriores: http://podcast.rubyonrails.pro.br/

No exemplo abaixo estou renderizando uma partial, e não estou informando qual variável ela deve usar para preencher o conteúdo. Hoje o Rails encara que como tenho uma variável de instância com o mesmo nome, implicitamente é esta que deve ser usada.

@customer = Customer.new("Carlos Brando")
render :partial => "customer"

Isto funciona mas é um pouco arriscado. A partir do Rails 2.2, esta funcionalidade continua funcionando mas sempre emitindo uma aviso de que será por pouco tempo:

@customer will no longer be implicitly assigned to customer

Sim, este recurso será removido do Rails no futuro.


Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.

Existe um bug no método count do ActiveRecord quando usamos uma associação has_many em conjunto com a opção :limit ou :offset. Vejamos um exemplo:

class Post < ActiveRecord::Base
  has_many :comments, :limit=> 2
end

No código acima quando tentarmos recuperar os comentários de um post, apenas 2 comentários devem ser retornados.

post.comments.length # => 2

# Veja o SQL usado:
# SELECT * FROM "comments" WHERE
# ("comments".post_id = 1) LIMIT 2

Mas, ao usarmos o método count:

post.comments.count # => 3

# Veja o SQL usado:
# SELECT count(*) AS count_all FROM "comments" WHERE
# ("comments".post_id = 1)

Como você pode ver o erro ocorre porque a clausula LIMIT 2 não foi incluída na query do SQL.

Obviamente isto já foi corrigido no Edge Rails e já estará funcionando no Rails 2.2.


Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.

Digamos que temos a seguinte associação has_many :through:

class Author < ActiveRecord::Base
  has_many :authorships
  has_many :books, :through => :authorships
end

Ao procurar por um livro você pode incluir a autoria em sua busca:

author.books.find(:all, :include => :authorships,
                  :conditions => ["authorships.primary = ?", true])

Isto funciona muito bem, sem erros. Mas tente fazer o mesmo com o método count:

author.books.count(:include => :authorships,
                   :conditions => ["authorships.primary = ?", true])

Temos um erro. Isto acontece porque a tabela authorships foi incluída duas vezes na mesma query.

O método find é mais esperto, porque ele cria um apelido para a tabela, coisa que o método count não faz. Eu sei que o exemplo dado não é muito bom, mas é apenas para tentar mostrar o problema com o método count.

Esta falha foi corrigida. Agora o método count se comporta exatamente como o método find em relação ao :include.


Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.

A classe Rails::SecretKeyGenerator, usada para gerar chaves secretas aleatórias como as usadas para armazenar a sessão do usuário em cookies, está sendo marcada para ser removida do Rails (Deprecate).

Em seu lugar o Rails passará a usar a classe ActiveSupport::SecureRandom que foi feita para o Ruby 1.9. A biblioteca SecureRandom faz a mesma coisa que a anterior, mas um pouco melhor.

Esta nova biblioteca suporta os seguintes geradores de números aleatórios:

  • openssl
  • /dev/urandom
  • Win32

Vejamos alguns exemplos de chaves geradas com esta nova biblioteca:

# random hexadecimal string.
ActiveSupport::SecureRandom.hex(10) #=> "52750b30ffbc7de3b362"
ActiveSupport::SecureRandom.hex(10) #=> "92b15d6c8dc4beb5f559"
ActiveSupport::SecureRandom.hex(11) #=> "6aca1b5c58e4863e6b81b8"
ActiveSupport::SecureRandom.hex(12) #=> "94b2fff3e7fd9b9c391a2306"
ActiveSupport::SecureRandom.hex(13) #=> "39b290146bea6ce975c37cfc23"

# random base64 string.
ActiveSupport::SecureRandom.base64(10) #=> "EcmTPZwWRAozdA=="
ActiveSupport::SecureRandom.base64(10) #=> "9b0nsevdwNuM/w=="
ActiveSupport::SecureRandom.base64(10) #=> "KO1nIU+p9DKxGg=="
ActiveSupport::SecureRandom.base64(11) #=> "l7XEiFja+8EKEtY="
ActiveSupport::SecureRandom.base64(12) #=> "7kJSM/MzBJI+75j8"
ActiveSupport::SecureRandom.base64(13) #=> "vKLJ0tXBHqQOuIcSIg=="

# random binary string.
ActiveSupport::SecureRandom.random_bytes(10) #=> "\016\t{\370g\310pbr\301"
ActiveSupport::SecureRandom.random_bytes(10) #=> "\323U\030TO\234\357\020\a\337"

Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.

Os métodos dinâmicos de pesquisa do ActiveRecord receberam uma versão destrutiva, que dispara um erro do tipo RecordNotFound caso nenhum registro seja encontrado, ao invés de apenas retornar nil como acontece com a versão original.

Para usar esta versão destrutiva, basta adicionar o sinal de exclamação no final do método. Veja um exemplo:

Topic.find_by_title!("The First Topic!")
# => ActiveRecord::RecordNotFound

Esta alteração é muito bem vinda.


Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.

Porque country_select virou um plugin

Por Carlos Brando em 24 de Setembro de 2008 | 2 comentários

Ontem eu mencionei aqui no blog que o helper country_select foi removido do Rails e virou um plugin. Eu não tinha entendido muito bem, mas o Rafael Mueller me ajudou a esclarecer o assunto.

O problema todo é que Taiwan segundo a norma ISO 3166, se chama na verdade “Taiwan, Province of China”. E foi exatamente assim que Michael Koziarski deixou no método.

Então, Jamis Buck questionou se não seria possível deixar apenas “Taiwan”, já que o “Province of China” parece ser politicamente agressivo. No GitHub iniciou-se então uma série de comentários que foram entrando cada vez mais em questões politicas e deixando o técnico totalmente de lado.

Mas, Michael Koziarski foi categórico em afirmar que essas questões politicas estão muito além do que poderíamos resolver com uma simples alteração no código. E se aceitasse esta alteração, logo outras seriam solicitadas para países como Kosovo, Ossétia do Sul, Abecásia, Transnístria e uma longa lista.

A melhor solução, ou pelo menos a que geraria menos controvérsias, foi remover o helper do Rails e disponibiliza-lo na forma de um plugin. Desta forma qualquer um poderia facilmente criar um fork e montar sua própria lista da forma como mais lhe agradar.

Foi uma ótima forma de resolver o conflito.

Apenas uma correção: No último post mencionei que gravariamos no banco de dados apenas a sigla do nome do país. Isto não é verdade, continuaremos gravando o nome inteiro do país, mas com a nova nomenclatura.


Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.

Lembra-se destes dois artigos?

Pois bem, esqueça. Esta funcionalidade foi removida do Rails, pois não estava totalmente completa e não daria tempo de terminar tudo até o lançamento do Rails 2.2.

Provavelmente ela deve voltar no futuro, mas dificilmente a tempo do próximo release.


Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.

Edge Rails: country_select removido do Rails

Por Carlos Brando em 23 de Setembro de 2008 | 2 comentários

O helper country_select foi removido do Rails. Para quem não se lembra, este método retorna uma lista com todos os países do mundo.

O motivo deste método ter sido removido do Rails é que aparentemente ele será atualizado para utilizar a norma ISO 3166 para os nomes dos países. Em outras palavras, ao invés de gravar no seu banco de dados o nome completo do país, você passaria a gravar apenas a sigla BR (ou BRA, isto vai depender da escolha feita pelo core team) para Brasil, por exemplo.

Esta alteração ainda não foi implementada, mas de acordo com Michael Koziarski algumas pessoas estão se sentido ofendidas por causa disto. Honestamente eu devo estar por fora de alguma coisa, mas não entendi o porque disso.

De qualquer forma o helper foi removido, mas um plugin foi criado para os que desejarem tê-lo de volta. Para instalar:

./script/plugin install git://github.com/rails/country_select.git

Quando tiver mais informações sobre isto eu volto a comentar.


Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.

Edge Rails: Correção do bug do Time#end_of_quarter

Por Carlos Brando em 22 de Setembro de 2008 | deixe um comentário

Um dos primeiros posts desta série pré-Rails 2.2 foi sobre um bug no método end_of_quarter. Na época enviei um patch para o core team com a correção do erro e só agora, meses depois, o patch foi aceito e implementado ao Rails.

O erro só ocorria ao usar o método com a data de 31 de maio, julho ou agosto.

Time.local(2008,5,31,0,0,0).end_of_quarter

Este bug é do tipo perigoso, pois só ocorre em casos muito específicos e passa batido na maioria dos testes. Mas tudo bem, agora está resolvido.


Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.

Dica: Testando rotas no console

Por Carlos Brando em 21 de Setembro de 2008 | 5 comentários

Andei brincando muito com rotas nomeadas ultimamente. O problema é que eu precisa de uma forma bem rápida de testar se as rotas que eu estava criando estavam realmente funcionando, enquanto eu editava o arquivo route.rb. E a melhor forma que encontrei foi testar as rotas no console do Rails.

Para isto bastou executar dois trechos de código antes de começar com a brincadeira:

$ ./script/console
# Loading development environment (Rails 2.1.1)

>> include ActionController::UrlWriter
# => Object

>> default_url_options[:host] = "example.com"
# => "example.com"

Agora é só testar as rotas:

>> user_url(1)
# => "http://example.com/users/1"

>> user_photos_url(1)
# => "http://example.com/users/1/photos"

Outro problema é que quando o arquivo route.rb é alterado, isto não reflete no console. Para ter acesso as últimas modificações, toda vez que houver uma atualização você terá de executar:

>> reload!
# Reloading...
# => true

Boa diversão!

Atualização

O Nando Vieira e o Daniel Lopes deram uma dica que eu não conhecia, que aliás torna muito mais fácil fazer a mesma coisa. Veja os comentários abaixo.

Edge Rails: Pluralização na Internacionalização

Por Carlos Brando em 20 de Setembro de 2008 | 1 comentário

Já falei anteriormente sobre o novo recurso de internacionalização que teremos no Rails 2.2. Muita coisa está sendo feita para deixar esta implementação o melhor possível, já que ela é de interesse de muita gente que usa o framework para desenvolver software para países que não usam o inglês como língua nativa.

No arquivo de localização, podemos internacionalizar frases do nosso aplicativo que dependem de um número ou quantidade, por exemplo:

datetime:
  distance_in_words:
    x_seconds:
      one: "1 segundo"
      other: "{{count}} segundos"

Quando estiver usando o método distance_in_words do Rails, quero que ele use o plural de forma correta quando o tempo for maior que um segundo. A alteração aqui é que anteriormente usaríamos a chave many para definir valores maiores que 1. Mas agora usaremos a chave other.


Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.

Rails Podcast Brasil - Episódio 31

Por Carlos Brando em 19 de Setembro de 2008 | 4 comentários

Pode parecer estranho, mas este é primeiro post que escrevo esta semana. Se você é um leitor assiduo deste blog deve estar achando um pouco estranho isto, mas tudo que você leu durante a semana por aqui já havia sido escrito por mim na semana passada. Estou envolvido em um projeto na Surgeworks que esta ocupando todo o meu tempo, por isto já deixei tudo preparado. ;)

Semana passada ficamos sem gravar o podcast e não poderiamos deixar isto acontecer novamente. Veja como gostamos de você: o Akita gravou o podcast sozinho…

Fiz uma edição rápida na gravação que ele me mandou, e confesso que não consegui ouvir todo o episódio. Mas como é o nosso velho Akita que gravou, com certeza está com a mesma qualidade de sempre.

Só um recado: não se esqueça do curso de Ruby on Rails que estarei ministrando pela e-Genial à partir do dia 7 de outubro. Matricule-se antes que as vagas acabem.

Download: Episódio #31
iTunes: http://podcast.rubyonrails.pro.br/rss
Episódios anteriores: http://podcast.rubyonrails.pro.br/

Neste Episódio

Edge Rails: Migrations transacionais no PostgreSQL

Por Carlos Brando em 18 de Setembro de 2008 | deixe um comentário

Quando uma migration está em execução e um erro ocorre, tudo que já foi executado será aplicado ao banco de dados, mas tudo que estiver após o erro, não será aplicado. Além disso a migration será marcada como concluída. Isto pode dar uma certa dor de cabeça para corrigir.

Mas, se o banco de dados que você estiver usando tiver suporte a DDL rollbacks em transações, então ele pode fazer uso deste recurso para desfazer tudo que foi feito antes do erro. O problema é que nem todos os bancos de dados possuem este recurso. O MySQL, por exemplo não possui.

Mas o PostgreSQL, SQL Server e outros bancos possuem.

Neste caso o código do Rails foi atualizado para permitir o uso de transações em migrations quando você estiver usando estes bancos de dados. Embora o Rails permita este recurso, o adapter do banco deve estar preparado para isto. Até o momento somente o do PostgreSQL parece estar.

Quase ia esquecendo de mencionar que este patch tem participação do meu amigo e companheiro da Surgeworks: Rodrigo Kochenburger.

Edge Rails: Relacionamentos belongs_to automatizados

Por Carlos Brando em 17 de Setembro de 2008 | 3 comentários

Se você estiver usando o Edge Rails em seu projeto, tente executar o seguinte comando para criar um novo modelo:

./script/generate scaffold comment author:string body:text post:references

Note que estou informando que meus comentários terão uma referência a tabela posts. Ou em outras palavras que meus comentários pertencem (belongs_to) a um post. Agora veja o arquivo app/models/comment.rb gerado pelo script:

class Comment < ActiveRecord::Base
  belongs_to :post
end

O relacionamento com a tabela posts já foi incluído automaticamente no modelo. Este é um novo recurso que encontraremos no Rails 2.2.

Edge Rails: camelize(:lower)

Por Carlos Brando em 16 de Setembro de 2008 | deixe um comentário

Por padrão o método camelize do Rails é usado para converter string para o formato UpperCamelCase. Mas também podemos converter para o formato lowerCamelCase se usarmos o argumento :lower. Porém, tente executar o código abaixo no terminal de um projeto Rails (menor ou igual ao 2.1.1):

'Capital'.camelize(:lower)
# => "Capital"

Como você pode ver, a letra ‘C’ no ínicio da palavra não retornou minúscula como deveria. Isto foi corrigido. Veja o retorno do mesmo trecho de código, agora executado no Rails 2.2:

'Capital'.camelize(:lower)
# => "capital"

Categorias:

Links:

Propaganda: