簡體   English   中英

帶導軌4.2.0的參數數量錯誤(1..2為0)

[英]Wrong number of arguments (0 for 1..2) with rails 4.2.0

我想在我的rails項目中使用gem'stuff-classifier'。 首先,我在新項目中使用Rails 4.1.7進行了測試,並按預期工作。 但是,當我在目標項目中執行相同操作時,我遇到了ArgumentError問題:參數數量錯誤(1..2為0)。 但是當我初始化StuffClassifier :: Bayes類時,我給出了StuffClassifier :: Bayes.new(“ Music_Classifier”)

下面我展示了我的所作所為:

首先添加到gemfile gem'stuff-classifier'

接下來生成的帶有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

在我的db / 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)

當我在Rails控制台中嘗試此操作時,我遇到了相同的錯誤消息。

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 > 

我嘗試使用Stack上的這個主題解決此問題 ,因為以前我有rails 4.2.0.rc3,但是將rails升級到4.2.0之后,我仍然遇到這個問題。

如何解決此錯誤,或如何以其他方式使用東西分類器?

謝謝。

編輯:db / seeds.rb的內容

Classifier.create!

這與您對StuffClassifier::Bayes.new調用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 ,它可以用作ActiveRecord和gem之間的適配器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM