我有database field
名为 sample_code 。此字段按以下方式组成:sample_id/year/lab_id
lab_id
是固定的,总是一样的。 year
相应地更改当前年份... sample_id
其增量(每年重置而不是数据库字段)。
我想要做的是每次我创建一个新的样本,它为我生成sample_code
并将其与其他示例字段一起保存...
我的怀疑是: 1 - 如果sample_id不在数据库中,我如何继续递增sample_id? 2 - 如何每年重置样品ID代码? 3 - 放置/调用此代码的最佳位置在哪里?样品的控制器?
感谢您提供的所有帮助
答案 0 :(得分:1)
如果您没有在应用程序之外使用数据库,那么将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