【发布时间】: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?(&:blank?)之类的内容进行检查。 -
您缺少
]来关闭address_attributes的数组。 -
我解决了这是控制器中的一个问题。我删除了
lambda并更改为reject_if: all_blank感谢您的支持小伙子们。
标签: ruby-on-rails ruby