我正在使用带有postgresql的Rails 4。 我的模型有一个title属性,它是唯一的。 但是,如果用户提交了重复的标题,我想将其递增一个。 假设标题是“Crepes”,如果另一个用户使用“Crepes”提交,它会将其保存为“Crepes 1”,“Crepes 2”等等。
我认为最好的方法是让另一个名为display name的列,并保持原始标题。在创建之前找到具有相同标题的那些并适当地插入正确的数字。
有更好的方法吗?
答案 0 :(得分:1)
最简单的方法确实是在before_create方法中,但你不需要新的列(除非你想要一个),因为你可以这样做:
before_create :check_for_uniq
#...
#...
#...
def check_for_uniq
matches = Object.find_by_name(/#{self.name}|#{self.name}_\d/).count
self.name = "#{self.name}_#{matches}"
end
除非您尝试拥有最终用户无法看到的显示标题和隐藏标题,否则您肯定需要另一列隐藏数据。
答案 1 :(得分:1)
我认为最好的方法是在插入新列的时候将具有相同标题的对象的数量保存到另一列,但保存标题,因为它是键入的:
@my_models_amount = MyModel.where(title: 'Crepes').count
@my_model = MyModel.new(title: 'Crepes', title_counter: @my_models_amount)
然后显示它:
def display_title
title_counter.zero? ? title : "#{title} #{title_counter}"
end