2016-03-08 148 views
0

我:Ruby on Rails的多对多验证

scaffold attendance event:references user:references attendance_rate:references 
scaffold user name email 
scaffold event start_time end_time 
scaffold attendance_rate rate:integer #)[1 or 0], i do not want to use boolean) 

协会:

event has_many :attendances 
attendance belongs_to :event 

user has_many :attendances 
attendance belongs_to :user 

问题:我怎么能允许同一个用户 “参加” 同一事件只有一次?

Attendance.rb:

class Attendance < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :attendance_rate 
    belongs_to :event 
    validates :user_id, :attendance_rate_id, presence: true 
    validates_uniqueness_of :event_id, :scope => [:user_id] 
end 

注:上座率在事件嵌套形式创作。

+3

唯一索引? 'validates_uniqueness_of'? – Smar

回答

0

我会用uniqueness验证与scope选项。这将是类似的,

validates_uniqueness_of :event_id, :scope => [:user_id]Attendance模型。

+0

我将此验证添加到Attendance.rb,但它不能解决问题 - 我仍然可以为同一用户创建多个出席同一个事件。我错过了什么? – makerbreaker

+0

@makerbreaker - 你是怎么添加的?你能告诉我模型代码吗? –

+0

我编辑了这个问题。所以当我创建它时显示没有验证错误,但是当我编辑'attendance_rate_id'时 - 只比显示'guest_id'错误... – makerbreaker