gpt4 book ai didi

mysql - 如何通过在 rails 中递增来保存唯一的字符串?

转载 作者:行者123 更新时间:2023-11-30 22:59:31 24 4
gpt4 key购买 nike

如何将唯一的字符串保存到我的数据库中,如果该值存在则增加它。

我所追求的行为类似于您保存文件时的行为,例如foo.txt, foo1.txt

我不想返回“不是唯一值”的错误消息。

class Person < ActiveRecord::Base
attr_accessible :name
end

Person.create(:name => 'Dave') # => 'Dave'
Person.create(:name => 'Dave') # => 'Dave1'
Person.create(:name => 'Dave') # => 'Dave2'

我正在使用 ruby​​、rails 和 mysql

最佳答案

您不需要为您的模型设置验证唯一性。你可以使用这样的东西:

class Person < ActiveRecord::Base
attr_accessible :name
before_create :check_and_increment


private
def check_and_increment
if Person.exists? name: self.name
similar_persons = get_all_with_same_name self.name
next_num = similar_persons.max_by{|m| m.scan(/\d+/)}.scan(/\d+/).first.nil? ? 1 : similar_persons.max_by{|m| m.scan(/\d+/)}.scan(/\d+/).first.to_i + 1
self.name = "#{self.name}#{next_num}"
else
true
end
end

def get_all_with_same_name name
where("name LIKE ?", 'name%')
end

end

对于您的问题,这是一个简单的想法。例如,需要小心像 Anna 和 Annastasia 这样的人。这些人有不同的名字,但他们的名字是重叠的。

希望这对您有所帮助。

关于mysql - 如何通过在 rails 中递增来保存唯一的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24702814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com