2013-11-22 100 views
0

我有兩個設計模型:UserVendor。我不希望供應商自己註冊,因此管理員用戶(由用戶表上的布爾字段控制)應該能夠在登錄時創建新的供應商。目前,當我在signed_in中嘗試此操作時,我無法訪問vendors_sign_up_path。我從服務器得到這個錯誤:以不同的設計資源登錄時創建新的設計資源

Filter chain halted as :require_no_authentication rendered or redirected 

因此顯然訪問此頁面不能被驗證?似乎對大多數情況是有意義的,但我怎麼能覆蓋這個?我創建了一個自定義的設計廠商/註冊控制器,像這樣以防止自動登錄在完成註冊後(根據this):

class Vendors::RegistrationsController < Devise::RegistrationsController 

def create 
    super 
end 


protected 

def sign_up(resource_name, resource) 
    true 
end 

end 

好像我需要重寫的註冊控制器別的東西爲了完成這個?任何幫助非常感謝,提前感謝!

+0

爲什麼不只是創建供應商/新頁面/動作並通過常規形式創建供應商?你甚至可以重新使用設計形式... – omarvelous

+0

啊,這是一個好主意,我認爲。這樣做是否包括Devise的所有模塊?我會試一試,讓你知道。 – settheline

回答

0

你的路線中是否有這樣的東西?

resources :admins do 
    resources :vendors 
end 
devise_scope :vendor do 
    root to: "devise/sessions#new" 
end 

不管怎樣,我的建議是用在這裏的角色:

#user.rb 
class User < ActiveRecord::Base 
    has_many :assignments 
    has_many :roles, :through => :assignments 
    def has_role?(role_sym) 
    roles.any? { |r| r.name.underscore.to_sym == role_sym } 
    end 
end 


#role.rb 
class Role < ActiveRecord::Base 
    attr_accessible :name 
    has_many :assignments 
    has_many :users, :through => :assignments 
end 

#assignment.rb 
class Assignment < ActiveRecord::Base 
    attr_accessible :user_id 
    belongs_to :user 
    belongs_to :role 
end 

這樣的供應商可以註冊爲用戶和管理員應該能夠在以後更改爲供應商的角色。

+0

嗯......我有'供應商'和'用戶'爲一些重要的關係原因的不同模型,再加上他們有很少的共同點。我並不想把它們整合到一個User類中,因爲關係的複雜性只會在未來增長。我沒有那個路由代碼塊。這到底是什麼? – settheline

+0

第一條路線使管理員可以創建供應商。 第二條路線爲供應商創建Devise登錄路徑。 –