2010-12-14 76 views
1

Voici mes Rails 2 itinéraires:Existe-t-il une meilleure façon de faire avec_options dans les routes Rails 3?

map.with_options :controller => 'foo', :conditions => { :method => :post } do |foo| 
    foo.one 'one', :action => 'one' 
    foo.two 'two', :action => 'two' 

    foo.with_options :special_flag => 'true', :path_prefix => 'special_prefix', 
    :conditions => { :method => :get } do |bar| 
    bar.three '',  :action => 'for_blank' 
    bar.four 'another', :action => 'for_another' 
    end 
end 

Comment convertir ce genre de chose à Rails 3? Continuez à utiliser with_options de la même manière? Il devient verbeux dans certains cas, parce qu'au lieu de faire

match '' => 'foo#for_blank' 

Je fais

match '', :action => 'for_blank' 

Répondre

2

Ouais, with_options fonctionne toujours dans Rails 3. Essayez ceci:

map.with_options :controller => 'foo', :via => :post do 
    match 'one', :action => 'one' #automatically generates one_* helpers 
    match 'two', :action => 'two' #automatically generates two_* helpers 

    foo.with_options :special_flag => 'true', :path => 'special_prefix', :via => :get do 
    match '',  :action => 'for_blank' 
    match 'another', :action => 'for_another', :as => "four" # as will change the helper methods names 
    end 
end 

L'option :via remplace votre laid hachage conditions avec une syntaxe beaucoup plus agréable.

+0

doux. aussi je peux laisser dehors via et faire 'poster 'one'' et' poster' two'', oui? –

+0

@John: C'est vrai. –

1

Essayez de coller aux méthodes les routes fournissent. Ils sont très puissants dans Rails 3 et devraient fournir tout ce dont vous avez besoin. Voir http://guides.rubyonrails.org/routing.html pour plus de détails

+2

Je l'ai lu attentivement, ne trouve pas beaucoup d'autres que 'scope' qui ne me aident pas, mais je viens juste de creuser un peu plus profond dans le api et déniché les goûts de 'controller 'food" do' ... Ça va faire l'affaire! http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Scoping.html#method-i-controller –

+0

hmmm en effet, 'controller' est manquant ... eh bien ... trop de méthodes dans un contrôleur n'est pas considéré comme acceptable, ce qui pourrait être la raison. bon à savoir vous avez trouvé une solution de toute façon. – iain

2

Comme ceci:

#JSON API 
defaults :format => 'json' do 
    get "log_out" => "sessions#destroy", :as => "log_out" 
    get "log_in" => "sessions#new",  :as => "log_in" 
    get "sign_up" => "users#new",  :as => "sign_up" 

    resources :users, :sessions 
end