如何将唯一的字符串保存到我的数据库中,如果该值存在则增加它。
我所追求的行为类似于您保存文件时的行为,例如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/