2015-02-24 88 views
1

我想在我的rails項目中使用gem'stuff-classifier'。首先,我使用rails 4.1.7在新項目中測試了它,並像我期望的那樣工作。 但是,當我在我的目的地項目中做同樣的事情時,我遇到了ArgumentError問題:參數的錯誤數量(0代表1..2)。但是,當我初始化StuffClassifier ::貝葉斯類我給StuffClassifier :: Bayes.new( 「Music_Classifier」)使用導軌的參數數量錯誤(0代表1..2)4.2.0

下面我展示了我maked:

首先加入到Gemfile中的寶石 '的東西分類器'

下生成的模型分類與music_classifier文本屬性

class Classifier < ActiveRecord::Base 
    serialize :music_classifier, StuffClassifier::Bayes 
    before_create :initialize_clfr 

    private 

    def initialize_clfr 
    cls = self.music_classifier = StuffClassifier::Bayes.new("Music_Classifier") 

    cls.train(:alternative, "Art Punk Alternative-Rock") 
    cls.train(:latin, "Alternativo & Rock Latino ") 
    end 
end 

在我的數據庫/文件seeds.rb我有Classifier.create!

然後我嘗試在控制檯rake db:seed,讓我這個錯誤信息:

rake aborted! 
ArgumentError: wrong number of arguments (0 for 1..2) 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/stuff-classifier-0.5/lib/stuff-classifier/bayes.rb:7:in `initialize' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/coders/yaml_column.rb:24:in `new' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/coders/yaml_column.rb:24:in `load' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/type/serialized.rb:52:in `default_value?' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/type/serialized.rb:16:in `type_cast_from_database' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute.rb:94:in `type_cast' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute.rb:42:in `original_value' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute.rb:37:in `value' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute.rb:54:in `changed_in_place_from?' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute_methods/dirty.rb:74:in `attribute_changed_in_place?' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute_methods/dirty.rb:149:in `block in changed_in_place' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute_methods/dirty.rb:148:in `select' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute_methods/dirty.rb:148:in `changed_in_place' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute_methods/dirty.rb:141:in `attributes_changed_in_place' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute_methods/dirty.rb:62:in `changed_attributes' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activemodel-4.2.0/lib/active_model/dirty.rb:173:in `attribute_changed?' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute_methods/dirty.rb:115:in `old_attribute_value' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute_methods/dirty.rb:90:in `write_attribute' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/timestamp.rb:52:in `block in _create_record' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/timestamp.rb:49:in `each' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/timestamp.rb:49:in `_create_record' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/persistence.rb:501:in `create_or_update' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/callbacks.rb:302:in `block in create_or_update' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activesupport-4.2.0/lib/active_support/callbacks.rb:88:in `call' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activesupport-4.2.0/lib/active_support/callbacks.rb:88:in `_run_callbacks' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activesupport-4.2.0/lib/active_support/callbacks.rb:734:in `_run_save_callbacks' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/callbacks.rb:302:in `create_or_update' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/persistence.rb:142:in `save!' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/validations.rb:43:in `save!' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute_methods/dirty.rb:29:in `save!' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/transactions.rb:291:in `block in save!' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/transactions.rb:347:in `block in with_transaction_returning_status' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/transaction.rb:188:in `within_new_transaction' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/transactions.rb:220:in `transaction' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/transactions.rb:344:in `with_transaction_returning_status' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/transactions.rb:291:in `save!' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/persistence.rb:51:in `create!' 
/home/pnc/sites/spolisty/db/seeds.rb:8:in `<top (required)>' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `block in load' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:240:in `load_dependency' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0/lib/rails/engine.rb:547:in `load_seed' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/tasks/database_tasks.rb:250:in `load_seed' 
/home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/railties/databases.rake:180:in `block (2 levels) in <top (required)>' 
Tasks: TOP => db:seed 
(See full trace by running task with --trace) 

當我嘗試這在軌控制檯我有同樣的錯誤味精。

c = Classifier.new 

    Loading development environment (Rails 4.2.0) 
2.1.3 :001 > c = Classifier.new 
ArgumentError: wrong number of arguments (0 for 1..2) 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/stuff-classifier-0.5/lib/stuff-classifier/bayes.rb:7:in `initialize' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/coders/yaml_column.rb:24:in `new' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/coders/yaml_column.rb:24:in `load' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/type/serialized.rb:52:in `default_value?' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/type/serialized.rb:16:in `type_cast_from_database' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute.rb:94:in `type_cast' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute.rb:42:in `original_value' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute.rb:37:in `value' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute_set.rb:31:in `fetch_value' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute_methods/read.rb:93:in `_read_attribute' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute_methods/read.rb:87:in `read_attribute' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/attribute_methods.rb:305:in `attribute_for_inspect' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/core.rb:443:in `block in inspect' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/core.rb:441:in `collect' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/activerecord-4.2.0/lib/active_record/core.rb:441:in `inspect' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0/lib/rails/commands/console.rb:110:in `start' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0/lib/rails/commands/console.rb:9:in `start' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:68:in `console' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:39:in `run_command!' 
    from /home/pnc/.rvm/gems/ruby-2.1.3/gems/railties-4.2.0/lib/rails/commands.rb:17:in `<top (required)>' 
    from bin/rails:4:in `require' 
    from bin/rails:4:in `<main>'2.1.3 :002 > 

我嘗試用這個topic對堆棧因爲以前我有軌4.2.0.rc3但upgrate軌到4.2.0後,我仍然有這個問題,解決這個問題。

我該如何解決這個錯誤,或者如何以其他方式使用東西分類器?

Thx尋求幫助。

編輯:分貝 內容/ seeds.rb

Classifier.create! 
+0

什麼是'seeds.rb'內容的ActiveRecord之間的適配器? – Santhosh 2015-02-24 13:49:29

+1

有簡單的Classifier.create! – Panczo 2015-02-24 13:52:40

+0

我無法按照提到的主題鏈接。 – Jesper 2015-02-24 14:06:53

回答

2

這有什麼,與你的StuffClassifier::Bayes.new調用,以及一切與你的企圖有ActiveRecord的序列化。

所有涉及的代碼是開源的,如果你看看你的堆棧跟蹤,你會看到導致該錯誤是線路:

.../gems/activerecord-4.2.0/lib/active_record/coders/yaml_column.rb:24:in `new'

該項目是免費提供的,審查你的瀏覽器:

https://github.com/rails/rails/blob/v4.2.0.rc3/activerecord/lib/active_record/coders/yaml_column.rb#L24

有問題的一行:

def load(yaml) 
    return object_class.new if object_class != Object && yaml.nil? 
    # ... 

正如您所看到的,當您的序列化YAML返回爲nil時,ActiveRecord假定它可以調用.new,該類沒有用於序列化的類。這使得StuffClassifier::Bayes沒有無參數初始值設定項,不能用作ActiveRecord序列化類,除非您有以前的序列化值。

你有很多前進的道路:

  • 猴路徑StuffClassifier::Bayes,以便它可以不帶參數
  • 叉在Github上的寶石進行初始化,使您的修改,並試圖讓他們合併到原始庫
  • 製作自己的班級,StuffclassifierSerializer,可作爲和創業板
+0

非常感謝您的回答。我認爲第二種選擇可能是最好的選擇。 – Panczo 2015-02-24 18:41:51

相關問題