Dica rápida: Como corrigir a quebra de layout da div com classe fieldWithErrors

Olá pessoal, depois de muito tempo sem postar nada, estou de volta com uma pequena porém interessante dica. Especialmente para você que não tem um designer para lhe ajudar ou que tem e não pode contar muito com ele, hehehe !

O problema:

Quando customizamos a aplicação, criamos nosso css, estilizamos tudo direitinho e depois de integrar o layout da aplicação e testarmos, nos debatemos com o seguinte problema: em nosso form, ao tentar gravar ou editar, o ActiveRecord identifica qual o erro de validação, em qual campo houve o problema. É incluído uma div com a classe fieldWithErrors para que este campo tenha um destaque, porém, se temos o layout com label e input na mesma linha, o div com a classe fieldWithErrors faz o input pular ir para a linha debaixo, quebrando assim o seu belo layout.

A solução:

Pesquisando um pouco no google, vi diversas soluções, onde o pessoal substituiu o div com o campo que continha o erro por um span e o problema então seria solucionado. Mas é claro que as coisas não funcionam de primeira, no meu caso, possuo um helper para exibição de mensagens de erros e lá possuo um método responsável por imprimir as mensagens, algumas pessoas utilizam os arquivos de configuração(environment.rb ou application.rb dependendo da versão de seu rails), mas não gosto muito dessa abordagem.

A solução seria apenas incluir:

ActionView::Base.field_error_proc = Proc.new { |html_tag, instance|”<span class=\”fieldWithErrors\”>#{html_tag}</span>” }

Mas Milk, você está utilizando Rails 3 agora esqueceu ? Como existe a questão de XSS Protection no Rails 3, devemos sempre chamar html_safe nos outputs e pronto, problema resolvido !

Espero que essa dica agilize a vida de vocês como agilizou a minha !

Anúncios

Dica rápida: problema com authlogic + rails 3

Mais uma da série de dicas rápidas, agora referente à um bug com o authlogic e rails 3.

Ao seguir o railscast do Ryan Bates sobre o Authlogic, porém utilizando o rails 3, ao tentar executar o login você irá se deparar com o seguinte erro:

undefined method `to_key' for #

Este erro quer dizer que o UserSession.new está sendo chamado sem passar username e password para ele, isso ocorre porque o esquema de rotas no rails 3 é diferente, causando assim dois problemas:

  1. Primeiro, Authlogic não consegue criar um hash com seu username/password e armazenar em :user_session, logo, params[…] não vai funcionar.
  2. Segundo, Authlogic não sabe qual método REST utilizar para a rotina de autenticação, logo vai falhar ao tentar executar o método create.

A solução que realmente funcionou para mim foi sobrescrever o método to_key no model UserSession(também devemos sobrescrever o persisted?) como a seguir:

def to_key
new_record? ? nil : [ self.send(self.class.primary_key) ]
end

def persisted?
false
end

Utilizei como referência para este post, o seguinte link: Authlogic and Rails 3 solution vale a pena dar uma conferida, lá o autor detalhou mais o erro e também postou outra possível solução(que não rolou aqui para mim).

Abraços e até a próxima !

Dica rápida 2: problema ao instalar a gem mysql

Pessoal, aproveitando o embalo de domingo das dicas rápidas, aqui vai mais uma. O cenário é o seguinte: rails 3 instalado e a necessidade(e preferência) de utilizar o banco de dados mysql; sistema operacional: Mac OS X 10.6.6.

Ao tentar executar bundle install com a gem mysql no Gemfile, ou ao tentar executar gem install, o erro retornado é o seguinte(resumo):

Building native extensions.  This could take a while…

ERROR:  Error installing mysql:

ERROR: Failed to build gem native extension.

Erro detalhado: http://pastie.org/1535589

Com a ajuda de nosso amigo de sempre, o Google e também com as dicas da mensagem de erro também cheguei à conclusão de que a causa do erro foi o fato de a instalação do mysql estar em um local que não foi encontrado ao tentar instalar a gem, logo, a solução foi rodar o comando com uma das opções e obtive sucesso rodando da seguinte maneira:

gem install mysql — –with-mysql-config=/usr/local/mysql/bin/mysql_config

Espero que este post ajude outras pessoas além de me ajudar futuramente quando me deparar com este problema, hehe !

Dica Rápida: Verificar se a gem é compatível ao Rails 3

Hoje é dia de dica rápida, ou seja, algo bem útil mas que não necessita de grandes explicações, ou um post extenso.

A dica rápida de hoje serve para aqueles que como eu estão se aventurando na versão mais atualizada do rails e querem saber se a gem a ser utilizada no projeto é compatível com o rails 3. Aliás, esta dica serve para testar também a compatibilidade com jruby e ruby 1.9.

Basta entrar no site railsplugin e procurar pela gem que deseja utilizar, simples assim !

 

Até a próxima !