1

Spree のロール テーブルにさらにロールを追加できるように、Class Role を拡張したいと考えています。私のアプリケーションでは、役割に基づいて異なる価格が設定されます。

デフォルトでは、ロールには (「admin」および「user」) が含まれます。テーブルにもっと種類を追加したい。

Q1: 拡張機能の 1 つで Role クラスを拡張することはできますか? Q2: 1 つの場所から価格を取得するように、さまざまな役割に基づいて価格を実装 (実際には app/models/Variant.rb で拡張) するにはどうすればよいですか? そのため、価格を使用している *_html.erb ファイルのコードを変更する必要はありません。

これを機能させることができれば、これは github にあるクールな拡張機能になります。

ありがとう

4

1 に答える 1

5

Spree でクラスを拡張するには、Modules またはclass_eval. まくる拡張子は、使用する傾向がありますclass_eval。以下は、カスタム拡張でのUser拡張の例です。Variant

class CustomRoleExtension < Spree::Extension

  # main extension method
  def activate

    # extend User
    User.class_eval do
      def business?
        self.roles.include?("business")
      end

      def sponsor?
        self.roles.include?("sponsor")
      end

      def developer?
        self.roles.include?("developer")
      end
    end

    # extend Variant
    Variant.class_eval do
      def price_for(role)
        # ...
      end
    end
  end

end

さらにロールを追加するdefaults/roles.ymlために、カスタム yaml ブロッ​​クを使用して拡張機能にa を追加しました。

coach_role:
  id: 3
  name: coach

trainer_role:
  id: 4
  name: trainer

graduate_role:
  id: 5
  name: graduate

次に、 を実行するrake db:bootstrapと、これらすべてのロールがデータベースに追加されます。

それがうまくいくかどうか教えてください。

于 2010-02-06T14:48:47.180 に答える