トリガーを使用できる時間を保存する必要があります。
class AddAllowedUsesToTriggers < ActiveRecord::Migration[5.0]
def change
add_column :triggers, :allowed_uses, :integer, default: 1
end
end
そして、許可された最大に対してuser_triggers
の数をチェックするカスタム検証を追加します。
class User
has_many :triggers, through: :user_triggers
has_many :user_triggers
end
class Trigger
has_many :users, through: :user_triggers
has_many :user_triggers
def available_to?(user)
# lets use -1 to represent infinity
return true if allowed_uses == -1
# otherwise evaluate if the user has reached the max allowed number
(allowed_uses - user_triggers.where(user: user).count) > 0
end
end
class UserTrigger
belongs_to :user
belongs_to :trigger
validates :trigger_available
def trigger_available
unless trigger.available_to?(user)
errors[:trigger] = 'has been expended by user'
end
end
end
出典
2016-12-13 23:33:07
max
データベースレベルの制限はありませんが、[validation](http://guides.rubyonrails.org/active_record_validations.html)で行うことができます。 –
"ただ一つ"の代わりに "範囲"を太字にする必要があります。LOL –
OPの要件を誤解しました。 – max