- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
如果我有如下的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/
我在尝试实现伪枚举字段时使用 Rails 3.1.0.rc5。 我正在尝试验证绑定(bind)到静态列表的字段的值。不幸的是,它总是无法通过验证。 型号 STATUSES = %w( pending
我在表中有一个字符串列,该列可以具有一系列预定义值。它还可以包含一个 nil 值。例如:狗,猫,鸟,无。 我想编写一个 validates_inclusion_of 来检查以确保输入的所有值都在该预定
我有一个 User其 permission 的模型对象属性受 validates_inclusion_of 限制至 ['user','org_admin','site_admin'] .在为这个对象设
我正在尝试创建验证,它只允许数组中的值。 validates_inclusion_of :valid_number, :in =>[1,2,3,4,5,6,7,8,9,10] 这行得通,但我想要的是这
如果我有如下的ActiveRecord模型 class Foo self.allowed_types def self.allowed_types # some code that re
我是 Rails 的新手,我正面临一个问题。我有 模型 Model1 id: integer account_id: integer Account id: integer 我在 Model1 中有如
我的模型中有这个验证: validates_inclusion_of :imported, :in => [true, false] 但仍然允许字符串和 Fixnums。这个 Shoulda 宏返回
我在让 rspec 正常运行以测试 validates_inclusion_of 我的迁移时遇到问题,如下所示: class CreateCategories Category.all.map(&:
以下代码确保选择的 time_zone 在 ActiveSupport::TimeZone.us_zones 中的时区内: validates_inclusion_of :time_zone, in:
这是不起作用的代码 class WeekDay %w(sunday monday tuesday wednesday thursday friday saturday), :case_sen
我收到一个错误消息,指出此方法不存在,但这看起来相当基本,我不确定为什么会收到此错误消息? it { should validate_presence_of :role } # This is OK.
我是一名优秀的程序员,十分优秀!