在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
不区分大小写”那么简单。
我很感激有关最佳实践,需要考虑的内容和有用的参考资料的任何建议。
答案 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
的用户覆盖。我看到的唯一陷阱是,第一个创建类别的用户必须拼写正确。