↓ Archives ↓

Tradução do tutorial de Ruby

Pelas palavras do agaelebe no guru-sp

Pessoal,
Depois de mais de um ano do início da tradução que correu a passos de
tartaruga anuncio que finalmente todas as cerca de 50 páginas do
tutorial do Ruby Learning.com estão traduzidas. Falta agora uma
revisão e quem quiser pode colaborar.
Agradeço as seguintes pessoas:
- Bruno Coimbra (fez um fork com todos os arquivos já formatados em
textile o que facilitou bastante a tradução)
- Bruno Grasseli – ajudou bastante no início da tradução
- PotHix – pediu a autorização do Satish para traduzir o material
- Fabrício Ferrari de Campos
- Felipe Pedrini
- Marcio G. M.
- Eu mesmo, que traduzi uma pancada de páginas! :)
Se eu esqueci de alguém, que se manifeste! Olhei apenas os commiters
do projeto.
Espero que esse tutorial seja de bastante valia para os newbies
iniciantes em Ruby e que não se sentem muito confortáveis com o
inglês.

O link para o tutorial é http://guru-sp.github.com/tutorial_ruby/

Múltiplas apps Rails no mesmo domínio com Apache + Passenger

Para ter múltiplas apps Rails no mesmo domínio é fácil, basta configurar os seguintes arquivos

No seu /etc/apache2/httpd.conf


<VirtualHost *:80>
  DocumentRoot /var/www
  RailsAllowModRewrite off
 <Directory /var/www/app1>
    Order allow,deny
    Allow from all
    RailsEnv development
    RailsBaseURI /app1
  </Directory>
  <Directory /var/www/app2>
    Order allow,deny
    Allow from all
    RailsEnv development
    RailsBaseURI /app2
  </Directory>
</VirtualHost>

Agora no config/environment.rb de sua app, adicione a seguinte linha.


# No environment da App1
config.action_controller.relative_url_root = '/app1'

# No environment  da App2
config.action_controller.relative_url_root = '/app2'
Múltiplas apps Rails no mesmo domínio com Apache + Passenger

[Dica Rápida] Limpe seu Controller

Uma das boa praticas do Rails é Controller magro, Model gordo. Sei que esse assunto já é tratado a muito tempo, mais tem muita gente ainda que fica perdida.
Skinny Controller, Fat Mode é trazer toda lógica do negocio para os models, deixando seu controller e views limpas.

No seu controller você tem os seguintes Finds.


@activities = Activity.all( :conditions => { :close = 1},
                            :limit => 10,
                            :order => 'urgency DESC' )

@activities = Activity.all( :conditions => { :close = 0},
                            :limit => 10,
                            :order => 'urgency DESC' )

Uma forma de tirar isso do controller é usando named_scope
e deixando tudo no model.


class Activity < ActiveRecord::Base
  named_scope :activies,
              :conditions => {:close => 0}, :order => "urgency DESC"

  named_scope :activies_close,
              :conditions => {:close => 1}, :order => "urgency DESC"
end

E no seu controller é só fazer referencia aos named_scope.


class ActivitiesController < ApplicationController
......
  def index
    @activities = Activity.activies
    @activities_close = Activity.activies_close
  end
......
end

Enviando notificação de registro pelo Gmail usando Rails 2.3

Digamos que você queira administrar melhor seu sistema e deseja receber no seu e-mail uma notificação a cada novo registro efetuado.

Comece um novo projeto.

rails notificar_registro
cd notificar_registro/
script/generate scaffold Call title:string author:string description:text
rake db:migrate

Antes de continuar, copie o código da lib smtp_tls e coloque ela na sua pasta ‘lib’. Como aqui eu estou enviando e-mail através do Gmail, preciso dessa lib para funcionar.

Agora abra o arquivo “config/environment.rb” e adicione esse código no final dele, depois do ultimo “end”


#ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.default_content_type = "text/html"
ActionMailer::Base.smtp_settings = {
  :enable_starttls_auto => true,
  :address => "smtp.gmail.com",
  :port => 587,
  :authentication => :plain,
  :user_name => "seu_email@gmail.com",
  :password => 'sua_senha'
  }

Agora vamos criar nosso ActionMailer.

script/generate mailer Notification

No nosso model ‘notification’ vamos criar a função ‘notify’ para enviar os dados a view e que será chamada no controller ‘Calls’.


class Notification < ActionMailer::Base

  def notify(title, author, description)
    recipients "nome@dominio.com.br" #E-mail de quem ira receber a notificação
    from "seu_email@gmail.com"
    subject "Novo registro adcionado"
    body :call => { :title       => title,
                    :author      => author,
                    :description => description }
  end

end

Em “view/notifications”, crie um arquivo chamado “notify.erb” e adicione o seguinte código.


<p>
Chamada: <b><%= @call[:title] %></b> <br />
Autor: <b><%= @call[:author] %></b> <br />
Descrição: <b><%= @call[:description]%></b>
</p>

Com o model e a view criada, já podemos disparar o e-mail quando uma nova chamada for adicionada. Va para o controller “Calls” e adicione o seguinte código.


# Adicione logo após flash[:notice] = 'Call was successfully created.'

Notification.deliver_notify( @call.title,
                                      @call.author,
                                      @call.description )

Para quem quiser baixar, o source esta disponível no GitHub