我有一个名为sample_code的database 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_id
、year
和 lab_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