gpt4 book ai didi

ruby-on-rails - Ruby 类评估,validates_inclusion_of 与动态数据

转载 作者:数据小太阳 更新时间:2023-10-29 07:04:28 25 4
gpt4 key购买 nike

如果我有如下的ActiveRecord模型

class Foo < ActiveRecord::Base
validates_inclusion_of :value, :in => self.allowed_types

def self.allowed_types
# some code that returns an enumerable
end
end

这不起作用,因为在评估验证时尚未定义 allowed_types 方法。我能想到的所有修复基本上都是围绕将方法定义移到验证之上,以便在需要时可用。

我明白这可能更像是一个编码风格问题(我希望我的所有验证都在模型顶部,方法在底部)但我觉得应该有某种解决方案,可能涉及初始模型加载的惰性评估?

我想做的事有可能吗?我应该只在验证之上定义方法,还是有更好的验证解决方案来实现我想要的。

最佳答案

为此,您应该能够使用 lambda 语法。大概是这样的:

class Foo < ActiveRecord::Base
validates_inclusion_of :value, :in => lambda { |foo| foo.allowed_types }

def allowed_types
# some code that returns an enumerable
end
end

这样它将在每次验证时评估 lambda block 并将 Foo 的实例传递给该 block 。然后它将返回该实例中 allowed_types 的值,以便对其进行动态验证。

另请注意,我从 allowed_types 方法声明中删除了 self.,因为那样会创建一个类方法,而不是您在这里想要的实例方法。

关于ruby-on-rails - Ruby 类评估,validates_inclusion_of 与动态数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7105865/

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