2013-06-27 12 views
10
  1. yılında yuva kaynağa zaman gerektiğini devise_for bloğunda ben yuva yolları? Lütfen kullanım durumunu göstermek için bir veya iki örnek verin. (Rotalar # 1)raylar 3. + Devise: Ne zaman devise_for & yuvalanmış kaynaklar

  2. :foo_object ise :users böylece :user has_one :foo_object ile ilişkilidir ben :users altında yuva :foo_object gerekiyor? (Rota # 2) :users, :users modelidir.

yolları # 1:

devise_for :users 
resource :foo_object 

yolları # 2:

devise_for :users 
resources :users do  
    resource :foo_object 
end 

cevap

23

Aşağıdaki örnek:

devise_for :users, :path => 'accounts' 

resources :users do 
    resources :orders 
end 

Yukarıdaki kimlik doğrulama yolu olduğu anlamına gelir "/accounts/sign_in" , "/accounts_sign_up" vb. Bazıları, devise_for :users'un aslında haritasının UsersController ve modeline ait olmadığını kabul etmenin önemli olduğunu bilmeyebilir. Onun bir kaynak yolu bile değil, pek çok göründüğü gibi görünüyor. Hangi aşağıdaki gibi davranın edemez yüzden: Yani şu yapabileceğini söyleyerek

# Session routes for Authenticatable (default) 
    new_user_session GET /users/sign_in     {:controller=>"devise/sessions", :action=>"new"} 
     user_session POST /users/sign_in     {:controller=>"devise/sessions", :action=>"create"} 
destroy_user_session GET /users/sign_out     {:controller=>"devise/sessions", :action=>"destroy"} 

# Password routes for Recoverable, if User model has :recoverable configured 
    new_user_password GET /users/password/new(.:format)  {:controller=>"devise/passwords", :action=>"new"} 
    edit_user_password GET /users/password/edit(.:format) {:controller=>"devise/passwords", :action=>"edit"} 
     user_password PUT /users/password(.:format)   {:controller=>"devise/passwords", :action=>"update"} 
         POST /users/password(.:format)   {:controller=>"devise/passwords", :action=>"create"} 

# Confirmation routes for Confirmable, if User model has :confirmable configured 
new_user_confirmation GET /users/confirmation/new(.:format) {:controller=>"devise/confirmations", :action=>"new"} 
    user_confirmation GET /users/confirmation(.:format)  {:controller=>"devise/confirmations", :action=>"show"} 
         POST /users/confirmation(.:format)  {:controller=>"devise/confirmations", :action=>"create"} 

ama bazı çatışmaları olurdu:

devise_for :users do 
    resources: somereosouce 
end 

Tüm devise_for yapar aşağıdaki yolları haritasına olduğunu : İç içe kaynaklara

devise_for :users 

resource :users do 
    resource :foo_object 
end 

biraz, aşağıdaki gibi bir şey varsa:

class Users < ActiveRecord::Base 
    has_many :foo_object 
end 

class FooObject < ActiveRecord::Base 
    belongs_to :users 
end 

Sonra iç içe kaynak

resource :users do 
    resource :foo_object 
    end 

Umarım bu şeyleri temizler olurdu. Ayrıca okumak için Nested Resource with Devise - Rails3

+2

'devise_for' sorusunu açıklığa kavuşturmak isteyebilirsiniz. En iyi açıklama okudum! – HM1

+0

Q # 2 için, kaynağı yerleştirmek için ne yapmam gerektiğini biliyorum ... Sanırım soru daha fazla gerekli mi yoksa bu durum için ilgili modellerin kaynağını yerleştirmek zorunda mıyım? Çünkü bu durumda, “current_user” 'ı kontrol cihazında kullanabilir ve ': foo_object' modelini oluşturabilir/güncelleyebilirim. Bunu böyle yapmanın sonuçları olup olmadığını merak ediyorum. – HM1

+1

@ HM1 tam olarak gerekli değil, ancak mantığınızı tanımlamak istiyorsanız uygulamanız o zaman evet. Kaynaklarınızı gruplandırmanın daha temiz bir yolu. Ancak sizin durumunuzda, bir 'kullanıcının' foo_object' ile ilişkili olduğunu biliyorsunuzdur. Böylece, bir 'kullanıcıya' bir eylem gerçekleştirdiğinizde, aynı zamanda bir foo_object eylemi de gerçekleştireceksiniz. Dolayısıyla, URL'niz potansiyel olarak bu gibi bir şey gibi görünecektir '/ users/3/foo_object/4' İç içe geçmiş rotaların olmasının gerekli olmasının bir diğer sebebi de Rails'teki önemli ilkelerden biri olan RESTful olmasıdır. – David

İlgili konular