product
モデルでは、改行のテキストプロパティがtags
に区切られています。この背後にある理由は、毎日実行されるクエリがあり、これらのフィールドのそれぞれを反復して、製品ごとに正規表現を構築し、できるだけ速くしたいと考えているからです。製品は数ヶ月に1回程度しか追加または更新されないため、検証は効率的である必要はありませんが、私は以前の制限が与えられているほど良いものにしたいと考えています。テキストフィールドの要素の一意性を効率的に検証
def build_regex_string
'(' + tags.gsub(/(\r?\n(?!$))/,'|').gsub(/(\r?\n)/,'') + ')'
end
def validate_tags_are_unique
Product.where.not(id: id).each do |product|
tags_regex = Regexp.new(product.build_regex_string)
return false if tags_regex.match(tags)
end
end
すると、私はそれは私が既に持っている方法だ主な理由は、正規表現を使用しています:
は、これまでのところ、私が作ってみた何これです。私は、pSQLの移行に検証を直接記述するのが良いアイデアかどうかを検討しようとしていましたか?私はそれに精通していない。私が調べたもう1つは、代わりに配列型を使用していましたが、配列で必要なものをActiveRecordで検証していないため、配列をビルドしてビルドする時間を無駄にしたくありません。最後に、正規表現をデータベースに実際に格納する方法を検討しましたが、文字列の正規表現を構築する必要があります。
最適化する必要がある現在のコードはどのくらい遅いですか? –