【问题标题】:Why am I getting `ArgumentError: wrong number of arguments (given 1, expected 0)` on save?为什么我在保存时收到“ArgumentError:参数数量错误(给定 1,预期为 0)”?
【发布时间】:2022-08-19 00:54:29
【问题描述】:

test.save! 升级到ruby 3.1 后,我有这种方法给我一个错误ArgumentError: wrong number of arguments (given 1, expected 0)

    def seed_test_program
      test = TestProgram.find_or_initialize_by(
        name: \"Program\",
        code: :program
      )
      test.metadata[\"status_types\"] = [
        \"enrolled\", \"excluded\", \"rejected\", \"not_enrolled\"
      ]
      test.metadata[\"status_reasons\"] = {
        \"excluded\" => [
          \"reason 1\",
          \"reason 2\",
          \"reason 3\"
        ],
        \'rejected\' => [
          \"reason 1\",
          \"reason 2\",
          \"reason 3\"
        ],
        \"not_enrolled\" => [
          \"reason 1\",
          \"reason 2\",
          \"other\"
        ]
      }
      test.save!
      Test.program.reload
    end

我努力了

      test = TestProgram.find_or_initialize_by({
        name: \"Program\",
        code: :program
      })

      options = {
        name: \"Program\",
        code: :program
      }
     TestProgram.find_or_initialize_by(**options)

(此方法调用如下Seeds::TestProgram.seed 其中种子函数包含seed_test_program

但它一直给我同样的错误。我该如何解决?

堆栈跟踪

ArgumentError: wrong number of arguments (given 1, expected 0)
/**/app/services/seeds/test_programs.rb:138:in `seed_test_program\'
/**/app/services/seeds/test_programs.rb:18:in `seed\'
/**/app/services/seeds/test_programs.rb:9:in `initialize\'
/**/app/services/seeds/test_programs.rb:5:in `new\'
/**/app/services/seeds/test_programs.rb:5:in `seed\'
/**/db/seeds.rb:51:in `<main>\'
/**/db/sample_data/test_environment.rb:13:in `<main>\'
/**/lib/tasks/sample_data.rake:6:in `block (4 levels) in <main>\'
Tasks: TOP => db:reset => db:setup => db:seed
(See full trace by running task with --trace)

测试程序

module Seeds
  class TestPrograms

    def self.seed
      self.new
    end

    def initialize
      seed
    end

    private

    def seed
     seed_test_program
    end

    def seed_test_program
      test = TestProgram.find_or_initialize_by(
        name: \"Program\",
        code: :program
      )
      test.metadata[\"status_types\"] = [
        \"enrolled\", \"excluded\", \"rejected\", \"not_enrolled\"
      ]
      test.metadata[\"status_reasons\"] = {
        \"excluded\" => [
          \"reason 1\",
          \"reason 2\",
          \"reason 3\"
        ],
        \'rejected\' => [
          \"reason 1\",
          \"reason 2\",
          \"reason 3\"
        ],
        \"not_enrolled\" => [
          \"reason 1\",
          \"reason 2\",
          \"other\"
        ]
      }
      test.save!
      Test.program.reload
    end
  end
end

种子.rb

# Seed Test Programs
Seeds::TestPrograms.seed
  • 将完整的堆栈跟踪添加到您的问题中。
  • 当然添加了@smathy
  • 请在代码中显示该行来电seed_test_program 方法。我猜它使用参数调用,但该方法不需要参数。
  • 添加了更多信息@LesNightingill
  • \'test_programs\' 表中 \'code\' 列的列类型是什么?

标签: ruby-on-rails ruby ruby-3 ruby-3.1


【解决方案1】:

解决了。奇怪的是,如果你这样做了

test = TestProgram.find_or_create_by(
        name: "Program",
        code: :program
      )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多