更新:我改变了我的模型,但它仍然不起作用。我收到以下错误消息: ActionController :: RoutingError(未定义的局部变量或方法`stop_words_finder'用于#< Class:0x007facb57f6908>)
模型/ pool.rb
class Pool < ActiveRecord::Base
include StopWords
attr_accessible :fragment
def self.delete_stop_words(data)
words = data.scan(/\w+/)
stop_words = stop_words_finder
key_words = words.select { |word| !stop_words.include?(word) }
pool_frag = Pool.create :fragment => key_words.join(' ')
end
end
LIB / stop_words.rb
module StopWords
def stop_words_finder
%w{house}
end
end
控制器/ tweets_controller.rb
class TweetsController < ApplicationController
def index
@tweets = Pool.all
respond_with(@tweets)
end
end
答案 0 :(得分:0)
stop_words = :stop_words_finder
将符号:stop_words_finder
指定给stop_words
。您要做的是调用stop_words_finder
中包含的Stopwords
方法,该方法将返回数组。在这种情况下,您所要做的就是删除冒号。
stop_words = stop_words_finder
答案 1 :(得分:0)
将此添加到您的模型,以使stop_words_finder可用于Pool实例:
include StopWords
Pool.new.stop_words_finder将正常工作
要使stop_words_finder可用于Pool类,请使用extend:
extend StopWords
Pool.stop_words_finder可以使用。
另外,为什么你要在Pool类定义中创建一个Pool实例呢?
答案 2 :(得分:0)
您可以将模块包含在ApplicationController类中。这对Pool
类完全没有影响。另外,在其定义中创建Pool
类的实例是非常不正统的 - 您是否真的想在每次加载应用程序的代码时在数据库中创建一个新行?我会按照这些方式重构事情
class Pool < ActiveRecord::Base
class << self
include StopWords
def create_from_data(data)
words = data.scan(/\w+/)
stop_words = stop_words_finder
key_words = words.select { |word| !stop_words.include?(word) }
pool = Pool.create :pooltext => key_words.join(' ')
end
end
end
然后,当您想要创建时,请致电Pool.create_from_data %q{Ich gehe heute schwimmen. Und du?}
。