【问题标题】:ArgumentError (wrong number of arguments (given 5, expected 1)) in RailsRails 中的 ArgumentError(错误数量的参数(给定 5,预期为 1))
【发布时间】:2020-07-03 20:23:32
【问题描述】:

我有一个名为 contracts 的 Scaffold 和一个名为 Addresses 的 Model。我想在脚手架中添加调用我的模型。 在 Contrato.rb(模型)中我有:

class Contrato < ApplicationRecord
  has_many :addresses
  accepts_nested_attributes_for :addresses, reject_if: lambda { |attrs| attrs['estado', 'cidade', 'bairro', 'endereco', 'cep'].blank?}

  before_save do
    self.paf.gsub!(/[\[\]\"]/, "") if attribute_present?("paf")
  end
end

当我尝试使用控制台创建合同时: Contrato.create!(razao: "Carrefour Comercial", cpnj: "12141618", insc_estadual: "12345", insc_municipal: "56789", paf: "", empresa: "Carrefour", addresses_attributes:[{estado: "Sc", cidade: "santos", bairro: "myborough", endereco: "avenue", cep: "112233"})rails 控制器返回:

Traceback (most recent call last):
        2: from (irb):8
        1: from app/models/contrato.rb:3:in `block in <class:Contrato>'
ArgumentError (wrong number of arguments (given 5, expected 1))

我对这个错误一无所知。

【问题讨论】:

  • 你能提供contracto.rb的前10行吗?
  • 我已经提供了。就是这些台词。
  • [] 预计将使用单个参数调用,您传递的是 5,因此会出现错误。如果您能够访问每个 addresses_attributes 的每个键/值,则可以使用 attrs.values.any?(&amp;:blank?) 之类的内容进行检查。
  • 您缺少] 来关闭address_attributes 的数组。
  • 我解决了这是控制器中的一个问题。我删除了lambda并更改为reject_if: all_blank感谢您的支持小伙子们。

标签: ruby-on-rails ruby


【解决方案1】:

我解决了添加

def contrato_params
      params.require(:contrato).permit(:razao, :cpnj, :insc_estadual,:insc_municipal, :empresa, paf:[], addresses_attributes:[:estado, :cidade, :bairro, :endereco, :cep])
end

合约控制器的addresses_attributes。

【讨论】:

    【解决方案2】:

    在上面的代码中

    class Contrato < ApplicationRecord
      has_many :addresses
      accepts_nested_attributes_for :addresses, reject_if: lambda { |attrs| attrs['estado', 'cidade', 'bairro', 'endereco', 'cep'].blank?}
    
      before_save do
        self.paf.gsub!(/[\[\]\"]/, "") if attribute_present?("paf")
      end
    end
    

    accepts_nested_attributes_for 应该是这样的

      accepts_nested_attributes_for :addresses, reject_if: lambda { |attrs| attrs.any? { |k, v| ['estado', 'cidade', 'bairro', 'endereco', 'cep'].include?(k) && v.blank? } }
    
    

    【讨论】:

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