如何在Postgres DB上使find_or_initialize不区分大小写?

时间:2013-04-09 09:00:17

标签: ruby-on-rails

在Rails 3.2应用程序中,我有一个属于类别的Post模型。在新的帖子表单中是一个文本字段,用于分配类别或创建新类别。

它通过Post模型

上的以下方法工作
def category_name=(name)
  if name.present?
    post_cat = category.find_or_initialize_by_name(name) 
    if post_cat.new_record?
      post_cat.save(:validate => false)
      self.category = post_cat
    else
      self.category = post_cat
    end
  end
end

这或多或少有效,但区分大小写。例如,数据库现在包含“精选”,“精选”和“特色”类别的记录。

如何使上面的find_or_initialize函数表现得好像不区分大小写。我使用的是Postgres数据库,我怀疑这并不像“使find_or_initialize不区分大小写”那么简单。

我很感激有关最佳实践,需要考虑的内容和有用的参考资料的任何建议。

1 个答案:

答案 0 :(得分:1)

我参考上面的评论:也许您可以添加第二个字段,其中包含显示给用户的字符串值,以及find_or_initialize名称列:

post_cat = category.find_or_initialize_by_name(name.downcase)
post_cat.display_name = name if post_cat.new_record?

因此,第二行确保现有记录不会被另一个尝试添加类别bRandnAmE的用户覆盖。我看到的唯一陷阱是,第一个创建类别的用户必须拼写正确。