6

私はそのモデルを持ってListingbelongs_to :userます。または、User has_many :listings. 各リストには、それを分類するカテゴリ フィールドがあります (など)。にはUser、 と呼ばれるブール フィールドもありますis_premium

カテゴリを検証する方法は次のとおりです...

validates_format_of :category,
                    :with => /(dogs|cats|birds|tigers|lions|rhinos)/,
                    :message => 'is incorrect'

プレミアム ユーザーのみがtigerslions、およびrhinosを追加できるようにしたいとしましょう。これについてどうすればいいですか?before_saveメソッドでそれを行うのが最善でしょうか?

before_save :premium_check

def premium_check
  # Some type of logic here to see if category is tiger, lion, or rhino.
  # If it is, then check if the user is premium. If it's not, it doesn't matter.
  # If user isn't premium then add an error message.
end

前もって感謝します!

4

3 に答える 3

10
class Listing < ActiveRecord::Base    
  validate :premium_category

  private

  def premium_category
    if !user.is_premium && %w(tigers lions rhinos).include?(category))
      errors.add(:category, "not valid for non premium users")
    end
  end
end
于 2013-10-23T14:38:12.337 に答える
2

You can use validates_exclusion_of:

validates :category, :exclusion => {
  :in => ['list', 'of', 'invalid'],
  :message => 'must not be premium category',
  :unless => :user_is_premium?
}

protected

def user_is_premium?
  self.user.premium?
end
于 2013-10-23T14:43:33.417 に答える