2

私はユーザー認証に Rails devise gem を使用していますが、現在、私のショップでは、ディスコント、特別価格などのためにユーザー グループを導入する必要があります。devise でこれを行う方法は? すべてのユーザーが多くのグループを持つことができ、すべてのグループがいくつかのユーザーを持つことができるため、これは 1/多対多であることに注意してください。

また、ユーザーが登録している場合、グループはたとえば 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
4

1 に答える 1

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

クローズド コントローラーの問題に関しては、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
于 2012-08-28T22:32:09.217 に答える