[RoR] – Entendo rotas e R.E.S.T – Parte 3
24 out 2011(há 13 anos)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
![](http://images.wfsneto.com.br/2011/10/contraints.png)
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...