Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将类/模块加载到模型中_Ruby On Rails_Ruby_Class_Model - Fatal编程技术网

Ruby on rails 如何将类/模块加载到模型中

Ruby on rails 如何将类/模块加载到模型中,ruby-on-rails,ruby,class,model,Ruby On Rails,Ruby,Class,Model,我正在RubyonRails上开发一个应用程序,我被卡住了。我有一个类,它将所有奇怪的字符映射成一个普通字符(即é,è->e)。我需要在两个模型中使用这个类,因为我不想重复代码,所以我想加载它以便模型可以使用它。知道怎么做吗 编辑*我上传了这个类* 类UtfAnalyzer

我正在RubyonRails上开发一个应用程序,我被卡住了。我有一个类,它将所有奇怪的字符映射成一个普通字符(即é,è->e)。我需要在两个模型中使用这个类,因为我不想重复代码,所以我想加载它以便模型可以使用它。知道怎么做吗

编辑*我上传了这个类*

类UtfAnalyzer
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 = {
    ['à', 'á', 'À', 'Á', 'ä', 'Ä']                => 'a',
    ['è', 'é', 'È', 'É', 'ë', 'Ë']                => 'e',
    ['ì', 'í', 'Ì', 'Í', 'ï', 'Ï']                => 'i',
    ['ò', 'ó', 'Ò', 'Ó', 'ö', 'Ö']                => 'o',
    ['ù', 'ú', 'Ù', 'Ú', 'ü', 'Ü']                => 'u',
    ['ç', 'Ç']                                                            => 'ç'
}

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
结束使用模块:

module CharConverter
  def convert(c)
    #your conversion logic here
  end
end
然后将模块包括在您的模型中:

class MyModel < ActiveRecord::Base
  include CharConverter
end
classmymodel
方法convert将在MyModel实例范围内(如
MyModel.new.convert
)可用。为了使convert在MyModel类作用域中对您可用(如
MyModel.convert
),请将
包含CharConverter
替换为
扩展CharConverter


您可以找到更多关于extend和include之间区别的信息。

问题是这个类是从Ferret::Analysis::Analyzer扩展而来的,我不能将它变成一个模块(难道我不能吗?),我看没有问题。将共享的功能放在一个模块中,然后将其包含在您想要的任何地方。Erez,非常感谢,您的解决方案工作得非常完美,而且简洁明了。再次感谢你!!