如何将has_one关联限制为单个记录

时间:2017-05-04 12:48:11

标签: ruby-on-rails activerecord

我在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]]

1 个答案:

答案 0 :(得分:2)

如评论中所述,创建数据库级别约束以检查列的唯一性并避免创建多个记录。您需要使用以下代码创建迁移文件:

add_index :travel_time, :event_id, unique: true

希望它有所帮助。