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

时间:2013-12-20 01:17:20

标签: ruby-on-rails database

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

lab_id是固定的,总是一样的。 year相应地更改当前年份... sample_id其增量(每年重置而不是数据库字段)。

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

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

感谢您提供的所有帮助

1 个答案:

答案 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_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