簡體   English   中英

為什么我在保存時收到“ArgumentError:arguments 的錯誤編號(給定 1,預期為 0)”?

[英]Why am I getting `ArgumentError: wrong number of arguments (given 1, expected 0)` on save?

在 test.save 升級到 ruby 3.1 后,我有這種方法給我一個錯誤ArgumentError: wrong number of arguments (given 1, expected 0) test.save! .

    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其中種子 function 包含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

解決了。 奇怪的是,如果你這樣做了

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

暫無
暫無

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

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