如何创建/保存此数据库特殊计算字段 - RoR



我有一个名为sample_codedatabase field。此字段按以下方式组成:sample_id/year/lab_id

lab_id是固定的,总是相同的。year与当年相应变化...sample_id其增量(每年重置一次,而不是数据库字段)。

我想做的是每次我创建一个新样本时,它都会为我生成这个sample_code并将其与其他样本字段一起保存......

我的疑问是:1 - 如果sample_id不在数据库中,如何继续递增?2 - 如何每年重置示例ID代码?3 - 放置/调用此代码的最佳位置在哪里?样品的控制器?

感谢您提供的所有帮助

如果不在应用之外使用数据库,只需将sample_id存储为自己的列应该没问题。 然后,您可以在模型上放置一个返回类似以下内容的方法:

def sample_code
  "#{sample_id}/#{Time.now.year}/<lab_id>"
end

然后,您可以每次递增sample_id

编辑

由于您每年需要将id重置为1并且该模型称为Sample,因此您应该通过将其称为annual_id而不是sample_id来避免混淆。 sample_id可能会与sample.id混淆,这是完全不同的事情。

通过此更改,您应该将信息存储在模型上的三列中以使其简单:annual_idyearlab_id 。 然后,您可以为每个记录设置:

annual_id = Sample.where(year: Time.now.year).pluck(:annual_id).max.to_i + 1
year = Time.now.year
lab_id = <however you are defining this>

这将使用当前年份进行year,然后在由于年份更改而没有记录时将annual_id重置为 1(新年份将给出 nil.to_i + 1 => 1 )。

然后,您可以为任何给定数据点返回所需的格式:

def sample_code
  "#{annual_id}/#{year}/#{lab_id}"
end

最新更新