【问题标题】:join table creating unintentional NULL entries in rails连接表在 Rails 中创建无意的 NULL 条目
【发布时间】:2011-01-24 21:44:18
【问题描述】:

我有以下型号。连接表引用 user_id 和 course_id 并且组合设置为唯一的。但是,在服务器上测试我的页面后,例如多次离开和加入课程,还有另一个 current_user 我的加入表创建了 course_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

【问题讨论】:

  • 能贴出加入和离开课程的代码吗?

标签: sql ruby-on-rails ruby-on-rails-3 activerecord


【解决方案1】:

当您尝试使用空 ID 保存 CourseEnrollment 时,添加 :null => false 将导致异常。如果您编写控制器操作来处理异常,那很好。您可以(并且应该)在 CourseEnrollment 模型中添加 validates_presence_of :user_id, :course_id,这样具有空 ID 的实例将无效,并且可以使用普通的 <model>.save 方法进行处理。

但是更大的问题是,为什么您的应用首先要保存具有空 ID 的行?例如,您可能正在创建孤立行(通过删除关联的课程或用户)。通常最好在 has_many 关联上添加 :dependent => :destroy 以防止这种情况发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多