我在has_one关系中仅保留一条记录时遇到问题
示例
分类和问题
问题 belongs_to 类别和类别 has_one 问题
实际上,即使存在has_one关系,我在构建的系统中也会看到,有一种情况我有多个属于某个类别的问题。
has_one关系不应该将它们限制为只有一条记录吗?如果没有,那么我怎样才能确保我始终保留一条记录?
修改
请注意,问题模型对类别ID有唯一性规则,仍然我发现多条记录的案例指向同一类别ID。
这怎么可能?
编辑2
模型概述
class Event < ApplicationRecord
has_one :travel_time, :inverse_of => :event, dependent: :destroy
end
class TravelTime < ApplicationRecord
belongs_to :event, :inverse_of => :travel_time
validates_uniqueness_of :event_id, allow_nil: true
end
编辑3
用于保存旅行时间记录的事件模型中的方法
def store_travel_times(body)
travel_times = self.build_travel_time
# get travel times
...
if !travel_times.save
logger.error "..."
end
end
查询用于查找多条记录
2017-05-04T13:39:15.277063 #50567] DEBUG -- : TravelTime Load (0.4ms) SELECT "travel_times".* FROM "travel_times" WHERE "travel_times"."event_id" = $1 [["event_id", 3105]]
答案 0 :(得分:2)
如评论中所述,创建数据库级别约束以检查列的唯一性并避免创建多个记录。您需要使用以下代码创建迁移文件:
add_index :travel_time, :event_id, unique: true
希望它有所帮助。