Ruby on rails 如何在RubyonRails中拥有唯一的学生id
我有一个简单的学生模型,但我也希望每个学生都有唯一的学生代码,我知道我可以使用学生id,但我希望学生代码类似于“STU0001”、“STU0002”。我如何实现这样的东西,以便每当我创建一个student时,它都会创建student代码并将其添加到DB中?Ruby on rails 如何在RubyonRails中拥有唯一的学生id,ruby-on-rails,ruby,database,indexing,database-design,Ruby On Rails,Ruby,Database,Indexing,Database Design,我有一个简单的学生模型,但我也希望每个学生都有唯一的学生代码,我知道我可以使用学生id,但我希望学生代码类似于“STU0001”、“STU0002”。我如何实现这样的东西,以便每当我创建一个student时,它都会创建student代码并将其添加到DB中? 在这种情况下,我如何通过学生的ID搜索学生?您可以在模型中使用创建挂钩之前进行搜索,例如- class Student < ActiveRecord::Base # Callbacks before_create :set_st
在这种情况下,我如何通过学生的ID搜索学生?您可以在模型中使用创建挂钩之前进行搜索,例如-
class Student < ActiveRecord::Base
# Callbacks
before_create :set_student_id
def set_student_id
self.student_id = "STU" + "%04d" % self.id
end
end
如果您希望id前缀为
STU
只是为了便于显示,那么我建议不要以这种方式存储在数据库中。让自动递增
id
的当前实现保持不变。在显示时,您可以使用
STU
为了方便使用,您可以创建方法将此逻辑包装为
def formatted_id # OR friendly_id or whatever you like
"STU#{'%04d' % self.id}"
end
不存储前缀id的原因:
学生
和员工
是否共享同一型号?如果是,请创建一个模型函数,在唯一id前面加上前缀STU000
,然后假设您想要自定义主键?还是希望学生id是另一个属性?为什么需要STU
作为前缀?如果只是为了查看它的方式,您可以在视图中进行交互时使用默认的id
,只需预先添加STU
。如果您真的希望在Rails中的数据库中有一个自定义主键,您可以在线查看如何做到这一点。例如,学生代码将如何使用?根据使用情况,这听起来可能是一个独特的坏主意。或者,它可能是辉煌的。如果没有额外的上下文,很难说。谢谢,但是我如何通过学生id搜索学生?要逐个学生id搜索,您必须使用一个小方法从学生id中提取id。我同意Anand的观点,将学生id存储在数据库中不是一个好主意。除了他给出的理由外,一个字段完全依赖另一个字段是不“规范化”的。@MozartLen我已经用搜索相关片段更新了答案。如果你能简单介绍一下你的用例是什么,那么我可以更好地帮助你。谢谢你提供这个解决方案,我想在创建学生时为他们分配一个学生id。我有一个“借出”模型,每当学生借出一本书时都会填写该模型,在该模型中我有学生id:references。我希望在创建借出记录时使用学生id引用学生。
def formatted_id # OR friendly_id or whatever you like
"STU#{'%04d' % self.id}"
end
def self.find_by_formatted_id(formatted_id)
self.find(formatted_id.gsub(/^STU/, ''))
end
def self.find_by_formatted_ids(formatted_ids) # formatted_ids will be an array
self.where(id: formatted_ids.map{ |fid| fid.gsub(/^STU/, '') })
end