2013-04-04 19 views
11

Birden çok adadan erişilebilen bir yol olmalı. Benim routes.rb ben bu güzel çalışır ancak hiçbir şey için yolları tabloyu yüklerTakma adın adı

get '/route' => 'controller#edit', :as => 'name_a' 
get '/route' => 'controller#edit', :as => 'name_b' 

yaptı. Belgelerimi anladığım kadarıyla, :as, çağrıldığında yardımcı bir yöntem tanımlar.

Yani için iki isim olan herhangi uygun bir yol yoktur benim ApplicationController gitti ve

alias_method :name_b, :name_a 

eklendi ve routes.rb

ikinci çizgiyi kaldırıldı ama bu Uncaught exception: undefined method name_a for class ApplicationController

ile başarısız tek yol mu?

================= DÜZENLEME ==================== detaylandırılması:

ben Kullanıcıların 2 çeşit oturum, kayıt, kilitleme, vb yönetmek için Devise gem kullanın, onları Admin ve Guest diyelim. Gem çok iyi koymak ama doğru şekilde davranması kesin yol adları için sorar.

app 
    controllers 
    users 
     admin 
      registration_controller.rb 
     guest 
      registration_controller.rb 
     session_controller.rb 
     password_controller.rb 
     registration_controller.rb 

Admin ve Guest kontrolörleri devralan: Benim durumumda

kadarıyla vasiyetle ilgili olarak, sadece kayıt süreci bu yüzden aşağıdaki gibi görünen bir yapı inşa çalışıyorum farklıdır Devise'den gelen registration_controller üzerinde.

Şimdi, düzgün çalışması için, Devise şifre alımlarını oluşturmak veya silmek için isimler mesela guest_user_password ve admin_user_password ihtiyacı vardır. Benim durumumda, her ikisi de aynı yolun altında olduğundan, her iki adın da aynı 'kullanıcı/parola' denetleyicisine yeniden yönlendirilmesini istiyorum.

Daha da önemlisi, bu yüzden alabalıklamayı gerçekten istedim. Görünümlerimi, şifre alma denetleyicisine yeniden yönlendirirken, Admin ve Guest yollarıyla ilgilenip ilgilenmediğine dikkat etmem gerekir. Her ikisi de kullanıcı içindir, bu yüzden her ikisi için de user_password'u kullanmak istiyorum.

Bu yüzden benim sorum. Ayrıca, yazdığım gibi, işler işe yaradığını da unutmayın. Sadece yazmanın en zarif yolunu bulmaya çalışıyorum.

+1

: as => 'name_a', örneğin ad_a_path ve name_b_path gibi bir rota için kullanabileceğiniz bir takma isim yapar; –

+0

Yani, hayır demek, yönlendirme tablosunu yüklemek için başka bir yol yoktur. :(Teşekkürler – muichkine

+0

Neden dünyadaki farklı isimlere göre aynı yola başvurmanız gerekiyor? – Catfish

cevap

3

Diğer adı ApplicationController'a koymaya ne dersiniz?

class ApplicationController < ActionController::Base 

alias_method :route_new, :route_old 
helper_method :route_new 

Bu adın yeni ad ve sonra eski ad olduğunu unutmayın.

helper_method çağrısı, bunları yalnızca denetleyicilerinizde değil, görünümlerinizde kullanmak içindir.İsterseniz

, daha sonra listenize routes.rb böyle bir şey ekleyebilir RouteAliases

+0

Bu, uygulamaya genel bir yol eklemez. – muichkine

+0

@muichkine ne de olsa, neden yeni bir rotaya ihtiyacınız var? Ama biliyorsun ki onu alias_method:: route_new_path,: route_old_path, değil mi? – Houen

+0

Yeni bir rota, üçüncü taraf tümleştiriciler için API'yi açıklığa kavuşturur. Ama aslında çözümüm kaynakları buldum: mallar,: controller =>: items,: type => 'Good' kaynakları: services,: controller =>: items,: type => 'Service' ' – muichkine

0

gibi bir yer modül denilen şey bu yerleştirebilirsiniz:

Rails.application.routes.draw do 

    ... 

    Rails.application.routes.named_routes.tap do |named_routes| 
    named_routes['new_name'] = named_routes['real_name'] 
    end 
end 

Bu new_name_path ve new_name_url yardımcıları yaratacaktır. Bunu Rails 5.0.6 ile test ettim.