Ruby on Rails 3 como Traduzir o nome do Model

No YML de tradução, por exemplo:

pt:
  activerecord:
    models:
      user: Usuário

Nós temos no arquivo acima a tradução do nome do model para o locale “pt”.

Para obter o nome do model traduzido:

User.model_name.human

Pronto!

Posted in Ruby on Rails at julho 16th, 2012. No Comments.

Ruby on Rails problemas para rodar migrações com acentos e caracteres especiais

Se você criar uma migração para popular dados no banco de dados e as strings contiverem acentos ou caracteres especiais é bem provavelmente que você vai ter alguns erros de parse no código Ruby:

Por exemplo:

class PopulateTests < ActiveRecord::Migration
  def up
    data = [['Saúde', 'Bla bla bla'], ['Cabeça', 'Ble ble ble'], ['João', 'Belipx Blopx']]
    data.each do |item|
      test = Test.create(:name => item[0])
      test.save
    end
  end
 
  def down
    Test.delete_all
  end
end

Normalmente essa migração vai dar problema para rodar, devido aos caracteres de acentos e outros.

Para resolver isso bastar colocar no começo da sua migração: #encoding: UTF-8
Ficando o arquivo assim:

#encoding: UTF-8
 
class PopulateTests < ActiveRecord::Migration
  def up
    data = [['Saúde', 'Bla bla bla'], ['Cabeça', 'Ble ble ble'], ['João', 'Belipx Blopx']]
    data.each do |item|
      test = Test.create(:name => item[0])
      test.save
    end
  end
 
  def down
    Test.delete_all
  end
end
Posted in Ruby on Rails at julho 5th, 2012. No Comments.

Ruby on Rails RSpec testando associações

A forma mais elegante que eu encontrei para testar associações no rspec é a seguinte:

describe Group do
      it { should belong_to(:supergroup) }
      it { should have_many(:users) }
end

Utilizando a gem shoulda-matchers: https://github.com/thoughtbot/shoulda-matchers/.

Posted in RSpec, Ruby on Rails at julho 4th, 2012. 1 Comment.

Ruby on Rails Guard

Quando nós desenvolvemos aplicações usando test-driven development sempre temos que rodar o comando:

rake spec

mas isso é um pouco chato e trabalhoso. Para facilitar a nossa vida existe o “Guard“, a ideia do “Guard” e rodar os testes automaticamente toda vez que algum arquivo associado ao teste for alterado.

O “Guard” pode ficar monitorando vários tipos de arquivos diferentes, desde o rspec, até as alterações de html e css no site. Uma outra extensão interessante do “Guard” é o “livereload“, ele dá um refresh no browser automaticamente toda vez que algum arquivo relacionado com a view é alterado.

Para instalar o Guard, no Gemfile adicionar:

group :development, :test do
  # ...
  gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i
  gem 'guard-rspec'
  gem 'guard-livereload'
  gem 'yajl-ruby'
  gem 'rack-livereload'
end

Depois rodar no terminal:

bundle
guard init rspec
guard init livereload
guard

Na raiz do projeto será gerado o arquivo Guardfile, com as configurações do Guard e todos os arquivos que são monitorados, algo como isso:

guard 'livereload' do
  watch(%r{app/.+\.(erb|haml)})
  watch(%r{app/helpers/.+\.rb})
  watch(%r{public/.+\.(css|js|html)})
  watch(%r{config/locales/.+\.yml})
end
 
guard 'rspec', :version => 2 do
  watch(%r{^spec/.+_spec\.rb})
  watch(%r{^lib/(.+)\.rb})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb') { "spec" }
 
  # Rails example
  watch('spec/spec_helper.rb')                       { "spec" }
  watch('config/routes.rb')                          { "spec/routing" }
  watch('app/controllers/application_controller.rb') { "spec/controllers" }
  watch(%r{^spec/.+_spec\.rb})
  watch(%r{^app/(.+)\.rb})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^lib/(.+)\.rb})                           { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/requests/#{m[1]}_spec.rb"] }
  watch(%r{^app/views/(.+)/})                        { |m| "spec/requests/#{m[1]}_spec.rb" }
end

Para configurar o livereload, adicione no arquivo: config/environments/development.rb

MyApp::Application.configure do
  config.middleware.insert_before(Rack::Lock, Rack::LiveReload)
 
  # ...or, change some options...
 
  config.middleware.insert_before(
    Rack::Lock, Rack::LiveReload,
    :min_delay => 500,
    :max_delay => 10000,
    :port => 56789,
    :host => 'localhost:3000',
    :ignore => [ %r{dont/modify\.html$} ]
  )
end

Para o livereload (http://livereload.com/) funcionar é necessário também instalar uma extensão no browser, nesse exemplo no Firefox:

Você pode obter as extensões aqui: http://feedback.livereload.com/knowledgebase/articles/86242-how-do-i-install-and-use-the-browser-extensions-.

Posted in Ruby on Rails at julho 4th, 2012. No Comments.

Rails Simple Form com Select Country e Prioridade

Usando o Simple Form é possível prover uma listagem de países.
Algumas vezes é interessante deixar um determinando país em destaque no select.

Para fazer isso basta adicionar a opção “:priority” na montagem do campo.

f.input :country, :priority => [ "Brazil" ]

Mais detalhes em: https://github.com/plataformatec/simple_form.

Posted in Ruby on Rails at junho 25th, 2012. No Comments.

Configurando aplicação Ruby on Rails para rodar localhost no Ubuntu

Ao invés de toda vez você rodar “rails server” para subir uma aplicação Ruby on Rails, você pode deixar ela rodando por padrão no seu servidor Apache em um endereço por exemplo: http://nome_da_sua_aplicacao

Para isso no terminal:

sudo apt-get install apache2
sudo apt-get install libapache2-mod-passenger

Agora no arquivo /etc/hosts adicione um nome local para a sua aplicação para responder no navegador:

127.0.0.1       localhost nome_da_sua_aplicacao
127.0.1.1       tron
 
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

No meu caso adicionei nome_da_sua_aplicacao para responder localmente.

Agora será necessário adicionar a configuração do site no Apache, para isso:

sudo touch /etc/apache2/sites-available/nome_da_sua_aplicacao

Depois edite o arquivo acima e adicione o seguinte conteúdo:

        ServerAdmin webmaster@localhost
        ServerName nome_da_sua_aplicacao
 
        DocumentRoot /var/www/nome_da_sua_aplicacao/public
 
                Options FollowSymLinks
                AllowOverride None
 
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
 
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
 
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
 
        ErrorLog ${APACHE_LOG_DIR}/error.log
 
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
 
        CustomLog ${APACHE_LOG_DIR}/access.log combined
 
    Alias /doc/ "/usr/share/doc/"
 
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128

Onde /var/www/nome_da_sua_aplicacao/public é o caminho da sua aplicação Ruby on Rails, mais exatamente o caminho até o diretório public dela.

E ServerName nome_da_sua_aplicacao é o nome que você deseja acessar via navegador o mesmo nome que configuramos no /etc/hosts.

Agora vamos criar um link simbólico para o site funcionar no Apache:

cd /etc/apache2/sites-enabled
sudo ln -s ../sites-available/nome_da_sua_aplicacao 001-nome_da_sua_aplicacao

Agora é a hora de reiniciar o servidor web Apache para pegar as novas configurações, para isso:

sudo /etc/init.d/apache2 restart

Agora se você abrir a URL http://nome_da_sua_aplicacao no seu navegador já deve ver o seu site rodando.

Posted in Ruby on Rails at junho 12th, 2012. No Comments.

Ruby on Rails mensagens de erro: {{attribute}} {{message}}

Você provavelmente vê essas mensagens de erro quando roda Rails 2.3.8 ou mais antigo no mesmo servidor com o novo Rails 3 para cima.

Para arrumar isso existe 2 possíveis soluções:

Solução 1:

  1. Crie o arquivo: config/preinitializer.rb
  2. Com o conteúdo abaixo:
    require 'rubygems'
    begin
      gem 'i18n', "~> 0.4.0"
    rescue LoadError
      # no biggie, optional anyway
    end
  3. Reinicie o servidor web

Solução 2:

No terminal:

gem uninstall i18n
gem install i18n -v 0.4.0

Por favor recomende-me se esse post ajudou você: Recommend Me

Posted in Ruby on Rails at maio 24th, 2012. No Comments.

How to resolve “Could not find a JavaScript runtime” with Ruby on Rails App

If you tried to start Rails server and got this error:

/usr/lib/ruby/gems/1.8/gems/execjs-1.3.0/lib/execjs/runtimes.rb:50:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

In Ubuntu, you can fix it installing node.js:

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install nodejs-dev

If you have other OS please look here: https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

After you should starting Rails server with successful.

Please recommend me if this post help you: Recommend Me

Posted in Ruby on Rails, Ubuntu at março 1st, 2012. No Comments.

Ruby on Rails internacionalizando / localizando views

O Rails 2.3 introduziu uma forma de internacionalizar / localizar suas views.

Por exemplo, nós temos a view: managers/mailer/reset_password_instructions.html.erb.
Você pode apagar esse arquivo ou renomear e criar templates de acordo com os idiomas que você tem disponível na sua aplicação, como:

managers/mailer/reset_password_instructions.en.html.erb e colocar o conteúdo de acordo com o idioma:

<p>Hello <%= @resource.email %>!</p>
 
<p>Someone has requested a link to change your password, and you can do this through the link below.</p>
 
<p><%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %></p>
 
<p>If you didn't request this, please ignore this email.</p>
<p>Your password won't change until you access the link above and create a new one.</p>

e

managers/mailer/reset_password_intructions.pt-BR.html.erb e colocar o conteúdo de acordo com o idioma:

<p>Olá <%= @resource.email %>!</p>
 
<p>Alguém pediu um link para alterar sua senha, e você pode fazer isso através do link abaixo.</p>
 
<p><%= link_to 'Alterar minha senha', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %></p>
 
<p>Se você não solicitou, por favor ignore este e-mail.</p>
<p>Sua senha não será alterada até que você acessar o link acima e criar uma nova.</p>

O Rails utiliza a view de acordo com o idioma definido no momento.

Posted in Ruby on Rails at maio 5th, 2011. 1 Comment.

Ruby on Rails substituir o div field_with_errors por span

Por padrão o Ruby on Rails cria um div com o class field_with_errors em torno dos campos com problema de validação, particularmente eu não gosto muito desse div, prefiro ter um span em torno dos campos.

Para fazer o Ruby on Rails gerar um span ao invés de um div, você pode adicionar um initializer, para isso:

Crie o arquivo field_with_errors.rb e salve no diretório config/initializers/ com o seguinte conteúdo:

# Para quando o campo tiver erro colocar um span em torno do campo e do label, ao invés de um div que quebra a estrutura
ActionView::Base.field_error_proc = Proc.new { |html_tag, instance| %{<span class="field_with_errors">#{html_tag}</span>}.html_safe }
Posted in Ruby on Rails at maio 3rd, 2011. No Comments.
 Assinar RSS Feed