1

私はプログラミングの初心者で、複数のプランを利用できるフリーミアムスタイルのアプリを作ろうとしています。

私はカンカンジェムを使用して、開催しているプラ​​ン(無料、プレミアム、プレミアム+)に応じて会場に役割を割り当てています。

割り当てられているプラ​​ンに応じてビューに表示される特定のオプションを制限する方法を知っていますが、割り当てられているプラ​​ンに応じて会場に追加されるレコードの数を制限するにはどうすればよいですか?

例えば

  • すべての会場で写真を撮りたいのですが、無料の会場は3つに制限する必要があります。
  • また、すべての会場に検索可能なタグを付けてほしいのですが、どのプランのプランに応じてタグの数を変更できるようにします。

現在、プランは会場モデルで次のように指定されています。

PLANS = %w[free premium premium+]

編集

Alex Peattieからの回答のおかげで、私は今正しい方向に進んでいると思います。

行を次のように変更しvalidate_on_create :photo_count_within_limitました:

validate :venuephoto_count_within_limit, :on => :create

しかし、VenuesController#updateでArgumentErrorが発生しています:Fixnumとnilの比較に失敗しましたエラー。

別の編集

これですべてが順調になりました。次の変更を加えただけです。

def photo_limit
  {:free => 3, :premium => 10}[plan.to_sym]
end

validate :venuephoto_count_within_limit, :on => :create

助けてくれてありがとう!

4

2 に答える 2

2

などの会場モデルメソッドを提供しますphoto_limittag_limit

class Venue < ActiveRecord::Base

  def photo_limit
    {:free => 3, :premium => 20, :"premium+" => 999}[plan]
  end

end

.plan(これは、現在の会場の計画を返すメソッドを想定しています)

次に、次のようにPhotoで検証を使用します。

class Photos < ActiveRecord::Base

  belong_to :venue
  validate_on_create :photo_count_within_limit

  def photo_count_within_limit
    if self.venue.photos(:reload).count >= self.venue.photo_limit
      errors.add(:base, "Exceeded venue photo limit")
    end
  end

end
于 2011-10-22T20:37:21.300 に答える
-1

私の現在のプロジェクトでも同じ質問があります。私はその部分に参加していないので、それがどのように解決されたかわかりません。たぶん、ユーザーの現在のプラン/サブプラン(はい、サブプランもあります)の権限をチェックするApplicationControllerのある種のグローバルフィルターを使用します。

月曜日に、私はこれをどのように実装しているかを確認し、あなたに答えるために時間を見つけようとします。

于 2011-10-22T20:31:09.893 に答える