Posts Tagged ‘tag’

Ruby on Rails conversão de datas com I18n

Postado em 09 nov 2009
Categoria(s) Ruby on Rails

Eu estou desenvolvendo uma aplicação que precisa trabalhar com datas com I18n e fazer conversões para salvar a data no banco de dados e exibir para o usuário de acordo com o seu idioma.

Eu estou usando o Date Picker do jQuery em um campo do tipo text_field.

datepicker

Vou mostrar um esboço de como eu fiz isso, em primeiro lugar eu defini no arquivo config/environment.rb o idioma:

config.i18n.default_locale = 'pt-BR'

Depois eu defini no arquivo config/locales/pt-BR.yml os formatos de data:

pt-BR:
  date:
    formats:
      default: "%d/%m/%Y"
      short: "%d de %B"
      long: "%d de %B de %Y"
 
    day_names: [Domingo, Segunda, Terça, Quarta, Quinta, Sexta, Sábado]
    abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb]
    month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro]
    abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez]
    order: [ :day, :month, :year ]

No meu formulário eu deixei assim:

<% content_for :javascripts do %>
  <%= include_jquery %>
  <%= javascript_include_tag "jquery.maskedinput-1.2.2.min" %>
  <% javascript_tag do %>
    $(document).ready(function() {
      // Adiciona date picker ao campo data de nascimento
      $.datepicker.setDefaults($.extend({showMonthAfterYear: false}, $.datepicker.regional['<%= I18n.locale %>']));
      $("#investor_date_of_birth").datepicker({
        showOn: 'both',
        buttonImage: '/images/calendar.gif',
        buttonImageOnly: false,
        buttonText: '<%= t('ui.admin.crud.datepicker_button_text') %>',
        changeMonth: true,
        changeYear: true,
        yearRange: '1900:<%= Time.now.year %>'
      });
 
      // Adiciona mascara ao campo data de nascimento
      $("#investor_date_of_birth").mask("99/99/9999");
    });
  <% end %>
<% end %>
 
<% form_for [:admin, @investor] do |f| -%>
  <%= f.error_messages %>
 
  <%= f.label :date_of_birth %>
 
  <% if @investor.new_record? %>
    <%= f.text_field :date_of_birth, :class => "smallInput" %>
  <% else %>
    <%= f.text_field :date_of_birth, :value => l(@investor.date_of_birth, :format => :default), :class => "smallInput" %>
  <% end %>
<% end %>

Caso exista o registro é realizado a conversão para exibir a data corretamente no formulário, não é necessário fazer conversão para salvar no banco de dados, o Rails já faz isso automaticamente.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

Ruby on Rails 2.2 Como Criar Rss Feed

Postado em 07 fev 2009
Categoria(s) Ruby on Rails

Hoje vou mostrar como criar Rss Feed no Ruby on Rails 2.2, no final você vai dar risada, de tão simples que é. Vamos lá!

Geralmente a action index é responsável por fazer a listagem das informações, ela pode ser parecer com isso:

1
2
3
def index
  @histories = History.find :all, :limit => 10
end

ou como abaixo, quando você está usando o plugin will_paginate:

1
2
3
def index
  @histories = History.paginate :all, :page => params[:page]
end

Não vamos precisar mexer em nada na action index.

Você precisa criar um novo template chamado index.rss.builder, que deve estar localizado em app/views/histories/index.rss.builder com o seguinte conteúdo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
xml.instruct! 'xml', :version => "1.0"
xml.rss :version => "2.0" do
  xml.channel do
    xml.title "Notícias"
    xml.description "Últimas Notícias"
    xml.language('pt-BR')
    xml.link formatted_histories_url(:rss)
 
    for history in @histories
      xml.item do
        xml.title history.title
        xml.description history.content
        xml.pubDate history.created_at.to_s(:rfc822)
        xml.link history_url(history)
        xml.guid history_url(history)
      end
    end
  end
end

Pronto! O que você não acredita que está pronto? É verdade falta adicionar o link no template index.html.erb para ver o Rss Feed.

No template index.html.erb adicione:

1
<%= link_to " RSS Feed", formatted_histories_url(:rss) %>

Para acessar o Rss Feed visite: http://localhost:3000/histories.rss.

Não esqueça de definir no seu arquivo config/routes.rb que o model history trabalha com urls RESTful:

1
map.resources :histories

Uhmm! Não estou feliz ainda, acho que dá para melhorar mais, é verdade podemos adicionar:

1
	<link href="http://localhost:3000/histories.rss" rel="alternate" title="RSS" type="application/rss+xml" />

Entre as tags:

1
<head>...</head>

do HTML, fazendo isso o navegador adiciona o ícone de Feed na barra de endereço e deixa a coisa mais intuitiva para o usuário.

Vamos fazer isso de uma forma mais elegante e dinâmica.

No layout da sua aplicação adicionei yield :auto_discovery entre as tags head do HTML:

1
2
3
4
5
<head>
...
  <%= yield :auto_discovery %>
...
</head>

Agora no template index.html.erb adicione:

1
2
3
<% content_for :auto_discovery do %>
  <%= auto_discovery_link_tag(:rss, :action => :index, :format => :rss) %>
<% end %>

Agora sim ficou legal! ;-)

Mais informações assista aqui: http://media.railscasts.com/videos/087_generating_rss.mov.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark