2013-11-22 59 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登录路径。 –