quinta-feira, 3 de março de 2011

Ruby on Rails do zero

No decorrer dos meus posts vou trabalhar sempre na mesma aplicação que começarei neste post, vou disponibilizar ela no Github.
Essa aplicação terá de tudo que um site tem normalmente, Devise, Simple Form, Sphinx, Acts As Taggable On, Gravatar, Autocomplete, Ajax, Rspec, etc.. Vou ajudar a criar tarefas que otimizem o seu tempo, como testar suas aplicações, como fazer um bom código. Muita coisa que vou escrever aqui vocês poderam encontrar fazendo uma busca no Google, mas a diferença é que vai estar tudo em um só lugar e explicado em vários posts para facilitar sua vida, fora que como disse antes, a aplicação ficará no Github para o seu auxílio.

Vou utilizar o Ruby 1.9.2, e estou usando RVM.

Crie uma aplicação nova:

rails new zblog -d mysql

Vá na pasta public e renomeie o arquivo index.

Abra o arquivo Gemfile e adicione as linhas abaixo:

gem 'aws-s3'
gem 'warden', '0.10.7'
gem 'bcrypt-ruby', '2.1.2'
gem 'devise', '1.1.rc2'
gem 'rspec'
gem 'rspec-rails'
gem 'simple_form', '1.3.1'

Irei falar de cada um com o tempo. Vamos configurar o Simple Form para você poder fazer os scaffolds já utilizando ele, primeiro instale.

rails g simple_form:install

Arquivos gerados abaixo:

create  config/initializers/simple_form.rb
create  config/locales/simple_form.en.yml
create  lib/templates/erb/scaffold/_form.html.erb

Crie um controller home que será a nossa futura capa:

rails g controller home

Vá em config/routes e coloque:

root :to => "home#index"

Vamos gerar um scaffold de Post para você ver a mágica do Simple Form.

rails g scaffold Post title:string body:text publication:datetime enabled:boolean

Em posts/_form.html.erb:

<%= simple_form_for(@post) do |f| %>
  <%= f.error_notification %>

  <div class="inputs">
    <%= f.input :title %>
    <%= f.input :body %>
    <%= f.input :publication %>
    <%= f.input :enabled %>
  </div>

  <div class="actions">
    <%= f.button :submit %>
  </div>
<% end %>

Se está acostomado com os scaffolds do Rails, você vai logo ver a diferença. Primeiro é adicionado um helper chamado simple_form_for, que é nosso formulário, os inputs criados criam um html automático que você teria que fazer, isso diminui e muito o código a ser colocado no seu arquivo.

Adicione o CSS abaixo para dar uma melhorada no layout:


.simple_form label {
  float: left;
  width: 100px;
  text-align: right;
  margin: 2px 10px;
}

.simple_form div.input {
  margin-bottom: 10px;
}

.simple_form div.boolean, .simple_form input[type='submit'] {
  margin-left: 120px;
}

.simple_form div.boolean label, .simple_form label.collection_radio {
  float: none;
  margin: 0;
}

.simple_form label.collection_radio {
  margin-right: 10px;
  margin-left: 2px;
}

.simple_form .error {
  clear: left;
  margin-left: 120px;
  font-size: 12px;
  color: #D00;
  display: block;
}

.simple_form .hint {
  clear: left;
  margin-left: 120px;
  font-size: 12px;
  color: #555;
  display: block;
  font-style: italic;
}

Depois disso faça alguns teste utilizando o Simple Form, como adicionar um "hint" no input "title":

<%= f.input :title, :hint => "title" %>

também teste validação no seu model, e veja como fica o layout:

class Post < ActiveRecord::Base
  validates_presence_of :title, :body
end

Existe um arquivo em config/initializers/simple_form.rb que você poderá configurar e um arquivo em config/locales/simple_form.en.yml, para tradução, se criar um arquivo simple_form.pt-br.yml, irá poder traduzir os inputs gerados pelo Simple Form. Mas se for traduzir tem que especificar em config/application.rb, qual será a língua padrão:

config.i18n.default_locale = 'pt-br'

Para não alongar muito o post e deixar cansativo, vou encerrar ele por aqui, no próximo vou mostrar o Devise e o Gravatar. Vou mostrar mais sobre o Simple Form com o tempo, por enquanto paro por aqui. Essa aplicação já está no Github(github.com/vagnerzampieri/zblog), você irá notar que tem código a mais do que foi mostrado aqui, mas nós chegaremos lá.
Até a pŕoxima.

6 comentários:

  1. Show de bola.
    Será que rola deploy toda semana?

    ResponderExcluir
  2. Raphael, vai rolar sim, estou fazendo isso em um horário que não me atrapalha, então não vejo dificuldades em fazer deploy constante.

    ResponderExcluir
  3. Só não inicia em rails agora quem não quer!!!!!! =)

    ResponderExcluir
  4. Vagner, muito bom. Parabéns pela iniciativa.

    ResponderExcluir
  5. É isso ai cara esta show bola o seu post, era disso que os iniciantes em Ruby on Rails precisam, e com sua ajuda logo logo veremos ótimos programadores com seus respectivos blogs sobre Ruby on Rails e em outras linguagens. Parabéns e continue com o bom trabalho.

    ResponderExcluir
  6. O css tá ficando como texto. não sei o que estou errando.

    ResponderExcluir