set 302010
 

Saudações!

Desenvolvendo um aplicativo exemplo com Ruby on Rails deparei-me com a seguinte situação: Criei um model para representar os estados brasileiros e decidi em sua migration, além de criar a tabela com os atributos necessários, aproveitar e popular o banco com os estados brasileiros.

Meu arquivo ficou assim:

class CreateStates < ActiveRecord::Migration
   def self.up
      create_table :states do |t|
            t.string :name, :nil => false, :limit => 255
            t.string :acronym, :nil => false, :limit => 2
            t.timestamps
      end

      State.create(:name => "Amazonas", :acronym => "AM")
      State.create(:name => "Amapá", :acronym => "AP")
      State.create(:name => "Bahia", :acronym => "BA")
      State.create(:name => "São Paulo", :acronym => "SP")
      State.create(:name => "Rio de Janeiro", :acronym => "RJ")
      State.create(:name => "Espírito Santo", :acronym => "ES")
      State.create(:name => "Minas Gerais", :acronym => "MG")
      State.create(:name => "Sergipe", :acronym => "SE")
      State.create(:name => "Alagoas", :acronym => "AL")
      State.create(:name => "Pernambuco", :acronym => "PE")
      State.create(:name => "Paraíba", :acronym => "PB")
      State.create(:name => "Rio Grande do Norte", :acronym => "RN")
      State.create(:name => "Maranhão", :acronym => "MA")
      State.create(:name => "Ceará", :acronym => "CE")
      State.create(:name => "Piauí", :acronym => "PI")
      State.create(:name => "Pará", :acronym => "PA")
      State.create(:name => "Roraima", :acronym => "RR")
      State.create(:name => "Rondonia", :acronym => "RO")
      State.create(:name => "Mato Grosso do Sul", :acronym => "MS")
      State.create(:name => "Mato Grosso", :acronym => "MT")
      State.create(:name => "Goiás", :acronym => "GO")
      State.create(:name => "Paraná", :acronym => "PR")
      State.create(:name => "Santa Catarina", :acronym => "SC")
      State.create(:name => "Rio Grande do Sul", :acronym => "RS")
      State.create(:name => "Acre", :acronym => "AC")
end

def self.down
      drop_table :states
end
end

Somente que, quando executei meu rake db:migrate fui apresentado ao seguinte erro:

db/migrate/20100930232925_create_states.rb:10: invalid multibyte char (US-ASCII)

Neste meu exemplo, utilizei o SQLite. Como a própria descrição do erro mostra (mensagens de erros com RoR são autoexplicativas em sua maior parte), há um erro na codificação do caracter que não está sendo interpretado corretamente pelo banco de dados.

Como solucionar?

Simples, basta no início do arquivo passarmos um comentário mágico (magic comment) que diz qual o tipo de codificação, que no nosso caso é o utf-8:

# coding: utf-8
class CreateStates < ActiveRecord::Migration
      def self.up
            create_table :states do |t|
ago 312010
 

Continuando minha jornada no aprendizado do Rails, deparei-me com a tarefa de preencher um formulário com datas. A opção de disponibilizar ao usuário a visualização de um calendário para escolha de uma data é bastante aplicada hoje em dia devido a facilidade e beleza disponibilizada.

Com o Rails, dei uma olhada na gem calendar_date_select e este atendeu às necessidades além de ser muito fácil configurar e inserir em seu código.

Instalando

Bem, utilizei para exemplo Rails 2.3.8.

Caso você deseje apenas instalar em um projeto, escolha:

$ cd my_app

$ script/plugin install http://calendardateselect.googlecode.com/svn/tags/calendar_date_select

Isto instalará o plugin dentro do diretório my_app/vendor/plugins

Você também pode optar por instalar a gem em seu ambiente

$ gem install calendar_date_select

sendo a versão mais atual até a confecção deste post a 1.6.1 e adicionar ao arquivo environment.rb a dependência de sua aplicação com a gem:

config.gem "calendar_date_select"

Utilizando

De forma simples e resumida, primeiramente, devemos adicionar em nosso layout, a chamada para os arquivos javascripts do Rails:

<%= javascript_include_tag :defaults %>

em seguida a chamada aos arquivos javascript e css do calendário:

<%= calendar_date_select_includes "silver"%>

O calendar_date_select proporciona diversas maneiras de utilização. Você pode conferir diversas formas de integração com o seu projeto no site demo. No caso mais simples, para a inserção de uma data em um formulário, apenas adicionamos na view do formulário:

<%= calendar_date_select_tag "minha_data" %>

No meu caso, como a data é um atributo de meu modelo Edição do Evento, associei-o:

<% form_for([@event, @event_edition]) do |f| %>
    <%= f.label :start_date %><br />
    <%= calendar_date_select_tag  "event_edition[start_date]", @event_edition.start_date %>
<% end %>
ago 022010
 

Resolvi utilizar o Devise para autenticação de usuários no rails. Existem outras alternativas como Authologic, Clearance, etc. Não sei responder qual destas é a melhor ou mais completa. Contudo, após uma pesquisa em fóruns e na comunidade ativa do rails, percebi que muitos adotam o Devise para autenticação e o CanCan para autorização (falarei mais adiante sobre ele) em projetos que necessitam destes recursos. Logo, cabe a você, desenvolvedor, escolher os recursos que mais lhe agradem e que resolvam as suas necessidades e problemas.

Um bom espaço para conhecer o Devise é no blog da empresa que desenvolveu a gem. Tanto no blog da PlataformaTec quanto no github do projeto, existem diversos documentos que fornecem uma excelente documentação para quem quer utilizar o Devise.

Neste primeiro post, vou mostrar procedimentos básicos, mas suficientes para integrar e configurar o Devise com seu projeto.

Continue reading »