byC*_*der 2 ruby-on-rails devise
我正在使用rails devise gem进行用户身份验证,但现在我的商店必须介绍用户组,以获取discont,特价等.如何使用devise进行此操作?请注意,这是一个/多对多,因为每个用户可以有多个组,每个组都有一些用户.
此外,当用户注册时,组必须是例如1.
Devise已经"关闭"了控制器(不像authlogic那样).那也是麻烦.
def create
super
group = Group.find_by_name("newuser")
user_group = UserGroup.create
user_group.user_id = current_user.id
user_group.group_id = group.group_id
user_group.save
end
Run Code Online (Sandbox Code Playgroud)
zyk*_*lic 13
除非我错误地阅读您的问题,否则不一定必须与Devise集成.只需创建一个描述组属性的Group模型和UserGroup连接模型:
class UserGroup < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
class User < ActiveRecord::Base
has_many :user_groups
has_many :groups, :through => :user_groups
# attr_accessible :user_id, :group_id
end
class Group < ActiveRecord::Base
has_many :user_groups
has_many :users, :through => :user_groups
end
Run Code Online (Sandbox Code Playgroud)
至于关闭的控制器问题,您可以将Devise控制器提升到您的应用程序中,或者创建一个继承它的新控制器,从而覆盖这些方法.阅读他们的链接GitHub页面.
编辑:我认为你是从错误的角度接近这个.您无需在Devise的控制器中执行任何操作,而是before_save向User模型添加回调.
class User < ActiveRecord::Base
before_save(:on => :create) :assign_default_group
# Other model stuff here
private
def assign_default_group
# This automatically creates the UserGroup record
self.groups << Group.find_by_name("User")
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4947 次 |
| 最近记录: |