2

我正在使用 rails devise gem 进行用户身份验证,但现在对于我的商店,我必须为不满意、特价等介绍用户组。如何使用设计来做到这一点?请注意,这是一对多/多对多,因为每个用户可以有很多组,每个组都有一些用户。

此外,当用户注册时,我的组必须是例如 1。

设计具有“封闭”控制器(不像 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
4

1 回答 1

13

除非我读错了您的问题,否则这不一定必须与设计集成。只需创建一个描述组属性的组模型和一个用户组连接模型:

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

至于关闭控制器问题,您可以将 Devise 控制器提升到您的应用程序中,或者创建一个从它继承的新控制器,从而覆盖方法。从他们的链接 GitHub 页面阅读更多信息。

编辑:我认为你从错误的角度来处理这个问题。您无需在 Devise 的控制器中执行任何操作,只需将before_save回调添加到您的用户模型。

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
于 2012-08-28T22:32:09.217 回答