Sql 联接表在rails中创建意外的空条目
我有以下型号。联接表引用用户id和课程id,并且组合设置为唯一。但是,在服务器上测试我的页面(例如多次离开和加入课程)后,我的加入表还与另一个当前用户一起创建了课程id为空的记录。这使我在以后获取数据时出错。所以现在我尝试添加Sql 联接表在rails中创建意外的空条目,sql,ruby-on-rails,ruby-on-rails-3,activerecord,Sql,Ruby On Rails,Ruby On Rails 3,Activerecord,我有以下型号。联接表引用用户id和课程id,并且组合设置为唯一。但是,在服务器上测试我的页面(例如多次离开和加入课程)后,我的加入表还与另一个当前用户一起创建了课程id为空的记录。这使我在以后获取数据时出错。所以现在我尝试添加:false=>null。这有帮助吗?谢谢你的时间 def self.up create_table :course_enrollments do |t| t.references :user, :null => false t.references :c
:false=>null
。这有帮助吗?谢谢你的时间
def self.up
create_table :course_enrollments do |t|
t.references :user, :null => false
t.references :course, :null => false
t.timestamps
end
add_index :course_enrollments, [:user_id, :course_id], :unique => true
end
添加
:null=>false
将在您尝试使用空ID保存课程记录时导致异常。如果您编写控制器操作来处理异常,则可以。您可以(并且应该)在CourseRolliment模型中添加验证:user\u id、:course\u id
的存在,这样id为空的实例将无效,并且可以使用正常的保存方法处理
然而,更大的问题是,为什么你的应用程序首先要用空ID保存行?例如,您可能正在创建孤立行(通过删除关联的课程或用户)。一般来说,在上添加:dependent=>:destroy
是个好主意,因为有许多关联可以防止这种情况发生。你能发布加入和退出课程的代码吗?