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

上記のコメントを参照してください。おそらく、ユーザーに表示される文字列の値を含む2番目のフィールドをfind_or_initialize名前列で追加できます。

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

したがって、2 行目は、既存のレコードが、のようなカテゴリを追加しようとする別のユーザーによって上書きされないようにしますbRandnAmE。私が見た唯一の落とし穴は、カテゴリを作成した最初のユーザーが正しい綴りをしなければならないことです。

于 2013-04-09T10:02:16.723 に答える