Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 联接表在rails中创建意外的空条目_Sql_Ruby On Rails_Ruby On Rails 3_Activerecord - Fatal编程技术网

Sql 联接表在rails中创建意外的空条目

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

我有以下型号。联接表引用用户id和课程id,并且组合设置为唯一。但是,在服务器上测试我的页面(例如多次离开和加入课程)后,我的加入表还与另一个当前用户一起创建了课程id为空的记录。这使我在以后获取数据时出错。所以现在我尝试添加
: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
是个好主意,因为
有许多关联可以防止这种情况发生。

你能发布加入和退出课程的代码吗?