1

私はブログ エンジンに取り組んでいますが、cancan をセットアップしたくありません。私はそれを行ういくつかの方法を見つけました:

foremは、ホスト ユーザー モデルに管理者フィールドを追加することで問題を解決しますが、複数のロールを持つと多くのフィールドが必要になり、それは間違いなくその方法ではありません。

このような試験をいくつか見ましたが、それを行うには、ホスト アプリのユーザー モデルにエンジン モデルとの has_many 関係を持たせる必要があります。

class User < ActiveRecord::Base
    attr_accessible :name
    has_many Blogcms::RoleUser
    has_many Blogcms::Role, :through => Blogcms::RoleUser
end

これが正しい方法であるかどうかはよくわかりませんが、分離されたエンジンであるためエンジンモデルが見えないため、これは機能しません

誰かがこれを試しましたか?私の英語でごめんなさい

編集

ユーザーモデルを検索する必要がなく、ロールモデルで関係を設定するだけで回避する方法を見つけました

module Blogcms
  class Role < ActiveRecord::Base

    has_many :role_user
    has_many :user, :class_name =>  Blogcms.user_class, :through => :role_user

    attr_accessible :name

    # Return all the roles for a user
    def self.roles_for_user(user)
        joins(:user).where('users.id' => user.id)
    end

  end
end

そのように、私の roles_for_user メソッドはユーザーのすべてのロールを返します

4

1 に答える 1

1

ユーザーモデルを検索する必要がなく、ロールモデルでリレーションを設定するだけで、回避策を見つけました。

module Blogcms
  class Role < ActiveRecord::Base

    has_many :role_user
    has_many :user, :class_name =>  Blogcms.user_class, :through => :role_user

    attr_accessible :name

    # Return all the roles for a user
    def self.roles_for_user(user)
        joins(:user).where('users.id' => user.id)
    end

  end
end

そのように、私のroles_for_userメソッドはユーザーのすべてのロールを返します

于 2012-09-28T16:43:42.830 に答える