1

更新:我稍微改变了我的模型,但它仍然不起作用。我收到以下错误消息:ActionController::RoutingError (undefined local variable or method `stop_words_finder' for #< 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
4

3 回答 3

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?}然后,您可以在要创建它时调用。

于 2012-08-04T16:57:33.667 回答
0
stop_words = :stop_words_finder

将符号分配:stop_words_finderstop_words。您要做的是调用stop_words_finder您包含的方法,该方法Stopwords将返回数组。在这种情况下,您所要做的就是删除冒号。

stop_words = stop_words_finder
于 2012-08-04T15:46:12.427 回答
0

将此添加到您的模型中,以使 stop_words_finder 可用于 Pool 实例:

include StopWords

Pool.new.stop_words_finder 将工作

要使 Pool 类可以使用 stop_words_finder,请使用 extend:

extend StopWords

Pool.stop_words_finder 将起作用。

另外,到底为什么要在 Pool 类定义中创建 Pool 的实例?

于 2012-08-04T16:00:18.873 回答