0

Ruby on Rails でアプリケーションを開発していますが、行き詰まっています。すべての奇妙な文字を通常の文字にマップするクラスがあります (つまり、é、è -> e)。2 つのモデルでこのクラスが必要です。コードを繰り返したくないので、モデルが使用できるようにロードしたいと考えています。それを行う方法はありますか?

編集*クラスをアップロードします *

class UtfAnalyzer < Ferret::Analysis::Analyzer include Ferret::Analysis

CHARACTER_MAPPINGS = {
    ['à','á','â','ã','ä','å','ā','ă']         => 'a',
    ['æ']                                     => 'ae',
    ['ď','đ']                                 => 'd',
    ['ć','č','ĉ','ċ']                         => 'c',
    ['è','é','ê','ë','ē','ę','ě','ĕ','ė',]    => 'e',
    ['ƒ']                                     => 'f',
    ['ĝ','ğ','ġ','ģ']                         => 'g',
    ['ĥ','ħ']                                 => 'h',
    ['ì','ì','í','î','ï','ī','ĩ','ĭ']         => 'i',
    ['į','ı','ij','ĵ']                         => 'j',
    ['ķ','ĸ']                                 => 'k',
    ['ł','ľ','ĺ','ļ','ŀ']                     => 'l',
    ['ñ','ń','ň','ņ','ʼn','ŋ']                 => 'n',
    ['ò','ó','ô','õ','ö','ø','ō','ő','ŏ','ŏ'] => 'o',
    ['œ']                                     => 'oek',
    ['ą']                                     => 'q',
    ['ŕ','ř','ŗ']                             => 'r',
    ['ś','š','ş','ŝ','ș']                     => 's',
    ['ť','ţ','ŧ','ț']                         => 't',
    ['ù','ú','û','ü','ū','ů','ű','ŭ','ũ','ų'] => 'u',
    ['ŵ']                                     => 'w',
    ['ý','ÿ','ŷ']                             => 'y',
    ['ž','ż','ź']                             => 'z'
}
HTML_MAPPINGS = {
    ['&agrave;', '&aacute;', '&Agrave;', '&Aacute;', '&auml;', '&Auml;']                => 'a',
    ['&egrave;', '&eacute;', '&Egrave;', '&Eacute;', '&euml;', '&Euml;']                => 'e',
    ['&igrave;', '&iacute;', '&Igrave;', '&Iacute;', '&iuml;', '&Iuml;']                => 'i',
    ['&ograve;', '&oacute;', '&Ograve;', '&Oacute;', '&ouml;', '&Ouml;']                => 'o',
    ['&ugrave;', '&uacute;', '&Ugrave;', '&Uacute;', '&uuml;', '&Uuml;']                => 'u',
    ['&ccedil;', '&Ccedil;']                                                            => 'ç'
}

def self.token_stream(field, str)
  ts = MappingFilter.new(RegExpTokenizer.new(str, /([a-zA-Z0-9ÑñàáäèéëìíïòóöùúüÀÁÈÉËÌÍÏÒÓÖÙÚÜçÇ]|(&([aeiouAEIOU](acute|grave|uml)|ccedil|Ccedil);))+/), HTML_MAPPINGS)
  ts = MappingFilter.new(StandardTokenizer.new(str), CHARACTER_MAPPINGS)
  ts = MappingFilter.new(ts, CHARACTER_MAPPINGS)
  ts = LowerCaseFilter.new(ts)
end

終わり

4

1 に答える 1

0

モジュールを使用します。

module CharConverter
  def convert(c)
    #your conversion logic here
  end
end

次に、モデルにモジュールを含めます。

class MyModel < ActiveRecord::Base
  include CharConverter
end

メソッド convert は MyModel インスタンス スコープで使用できます ( のようにMyModel.new.convert)。Convert を MyModel クラス スコープ ( のようにMyModel.convert) で使用できるようにするには、 に置き換えinclude CharConverterますextend CharConverter

拡張とインクルードの違いの詳細については、こちらを参照してください。

于 2012-07-18T07:28:36.493 に答える