[RoR] – Entendo rotas e R.E.S.T – Parte 3

24 out 2011(há 13 anos)
DevelopmentRuby on Rails
#routes#rotas#regex#localization#lambda#l10n#internationalization#i18n

Parte 3 - Finalizando rotas.

Olá pessoal, hoje ia falar de i18n e l10n com rails, porém ainda falta eu terminar último post, sobre Rota e R.E.S.T onde deixei o link para download, porém esse post ficou um pouco grande, ai aproveitei para não misturar assuntos e só terminar rota e R.E.S.T, bem se você ainda não tem o código para prosseguir faça o download e rode um rake db:migrate e então estamos prontos para dar continuidade a este post, bem sem mas delongas, "let's go" nessa pessoal...

Alterando alguns arquivos

routes

match '/home' => 'pages#index', :as => :home
match '/prices' => 'pages#prices', :as => :prices
match '/tour' => 'pages#tour', :as => :tour

Adicionando as linhas acima, no arquivo routes.rb, adicionando as actions correspondentes a controller pages e criando as correspondentes view.

Controller

class PagesController < ApplicationController
  def index
    @test = "text"
  end
    def prices
    @prices = "prices"
  end
    def tour
    @tour = "tour"
  end
end

Com isso já podemos abrir um terminal e rodar um rails c

ruby-1.9.2-p180 :001 > app.home_path
 => "/home"
ruby-1.9.2-p180 :002 > app.tour_path
 => "/tour"
ruby-1.9.2-p180 :003 > app.prices_path
 => "/prices"
ruby-1.9.2-p180 :004 > app.posts_path
 => "/posts"

Nas views e controllers não é necessário colocar o app.home_path apenas home_path. Bem esse foi a parte mais básica, podemos avançar um pouquinho mais...

Constraints

Exemplo que iremos colocar em prática

No exemplo acima usar constraints, e no caso do :year só passa se tiver 4 dígitos como mostra a expressão regular já no caso do mobile (:user_agent) tem que ter uma parte de iPhone e por último a rota secret só será aceita de estivermos no :host localhost.

Não iremos usar isso no nosso projeto, mas só para documentar vou, criar exemplo da imagem. Adicione a linha abaixo em routes.rb e depois crie o action secret no controller pages

Routes

constraints :host => /localhost/ do
  match "/secret" => "pages#secret"
end

Obs: Se por um acaso você não usar localhost não será renderizado. Veja que nesse link http://localhost:3000/secret funciona e nessehttp://0.0.0.0:3000/secret não

action

def secret
  render :text => 'Action secret...'
end

Ainda posso usar um lambda, simulando um aplicativo sinatra por exemplo:

constraints :host => /localhost/ do
  match "/secret" => lambda { |env| [ 200, {}, 'testando lambda' ] }
end

Bem como isso foi apenas um teste vou apagar o código da action e das routes.
Conclusão

Bem como falei no começo desse post, no próximo post falaremos de i18n e l10n...