首先,对不起我的英语不好。我还在学习。
我的数据库中有 3 个表:
问题
has_many :registers
has_many :solutions, through : :registers
解决方案
has_many :problems
has_many :problems, through : :registers
登记
belongs_to: problem
belongs_to :solution
该系统运行良好。我能够在所有 3 个表中插入新数据。
在 table/model 的视图中Register
,为了选择问题和解决方案,我使用了 collection_select,如下所示:
= form_for @register do |f|
.field
= f.label :problem_id
= collection_select( :register, :problem_id, @problems, :id, :name, {}, { :multiple => false })
.field
= f.label :solution_id
= collection_select( :register, :solution_id, @courses, :id, :name, {}, { :multiple => false })
.field
= f.label :entry_at
= f.datetime_select :entry_at
.actions = f.submit
仅当我尝试将此验证添加到Register
:
validates_uniqueness_of :student_id , scope: :course_id
然后我得到:
> undefined method `map' for nil:NilClass
> = collection_select( :register, :problem_id, @problems, :id, :name, {}, { :multiple => false })
我不知道为什么。
因此,我尝试通过控制器进行验证:
def create
@register = Register.new(register_params)
problem_id = @register.problem_id
solution_id = @register.solution_id
if Register.exists?(['problem_id LIKE ? AND solution_id LIKE ?', problem_id, solution_id ])
render 'new'
else
@register.save
respond_with(@register)
end
end
但错误仍然存在。
我相信原因是collection_select,但我不知道如何解决它。
再说一次,我能够在所有 3 个数据库表中保留日期。但是当我试图避免重复时,就会出现错误。