Pet*_*kou 2 activerecord ruby-on-rails
我无法在 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
Run Code Online (Sandbox Code Playgroud)
编辑 3
在方法的事件模型中使用,以节省出行时间记录
def store_travel_times(body)
travel_times = self.build_travel_time
# get travel times
...
if !travel_times.save
logger.error "..."
end
end
Run Code Online (Sandbox Code Playgroud)
用于查找多条记录的查询
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]]
Run Code Online (Sandbox Code Playgroud)
正如评论中所讨论的,创建数据库级别的约束来检查列的唯一性并避免创建多条记录。您需要使用以下代码创建迁移文件:
add_index :travel_times, :event_id, unique: true
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
1192 次 |
| 最近记录: |