我有用户和触发器表,以及一个名为TriggersUser的连接表
是否可以为每个用户定义仅一个触发器ID的范围?例如,每个用户只能拥有trigger_id: 1
一次,而trigger_id: 3
可以根据需要在连接表中与该用户一起存储多次。
是否可以为触发器ID和用户ID的唯一性定义模型的范围,但仅针对特定的trigger_ids?
谢谢!
答案 0 :(得分:1)
您必须存储触发器的使用次数。
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
答案 1 :(得分:0)
为什么不对TriggerUser
模型添加验证?
validates :trigger_id, unique: {scope: :user_id}
当然,还需要在这两个字段上添加唯一索引,因为在某些情况下会使用唯一验证will not ensure uniqueness