gpt4 book ai didi

ruby-on-rails-3 - 为什么这个 'validate' 方法会引发 ArgumentError?

转载 作者:行者123 更新时间:2023-12-01 16:22:37 25 4
gpt4 key购买 nike

各位,

我无法在我的 (helloworld-y) rails 应用程序中使用 validates_with 来工作。通读原始 RoR guides site 的“回调和验证器”部分并搜索了 stackoverflow,一无所获。

这是我删除所有可能失败的代码后得到的精简版代码。

class BareBonesValidator < ActiveModel::Validator
def validate
# irrelevant logic. whatever i put here raises the same error - even no logic at all
end
end

class Unvalidable < ActiveRecord::Base
validates_with BareBonesValidator
end

看起来像教科书上的例子,对吧?他们在 RoR guides 上有非常相似的片段.然后我们转到 rails 控制台 并在验证新记录时得到一个 ArgumentError:

ruby-1.9.2-p180 :022 > o = Unvalidable.new
=> #<Unvalidable id: nil, name: nil, created_at: nil, updated_at: nil>
ruby-1.9.2-p180 :023 > o.save
ArgumentError: wrong number of arguments (1 for 0)
from /Users/ujn/src/yes/app/models/unvalidable.rb:3:in `validate'
from /Users/ujn/.rvm/gems/ruby-1.9.2-p180@wimmie/gems/activesupport-3.0.7/lib/active_support/callbacks.rb:315:in `_callback_before_43'

我知道我错过了什么,但是什么?

(注意:为了避免将 BareBonesValidator 放入单独的文件中,我将其放在了 model/unvalidable.rb 之上)。

最佳答案

validate 函数应将记录作为参数(否则您无法在模块中访问它)。指南中缺少它,但 the official doc是正确的。

class BareBonesValidator < ActiveModel::Validator
def validate(record)
if some_complex_logic
record.errors[:base] = "This record is invalid"
end
end
end

编辑:它已经在 the edge guide 中修复了.

关于ruby-on-rails-3 - 为什么这个 'validate' 方法会引发 ArgumentError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5973909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com