0

在 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不区分大小写”那么容易。

对于最佳实践、要考虑的内容和有用的参考资料,我很感激。

4

1 回答 1

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. 我看到的唯一缺陷是,创建类别的第一个用户必须拼写正确。

于 2013-04-09T10:02:16.723 回答