【发布时间】:2011-12-10 02:28:06
【问题描述】:
有一段我的代码:
module Configuracao
extend self
class Key
include ActiveModel::Validations
attr_accessor :name, :type, :default, :validations, :group, :available_values
def initialize(params)
params.symbolize_keys!.assert_valid_keys(:name, :type, :default, :validations, :group, :available_values)
@group = params[:group]
@name = params[:name]
@type = params[:type]
@available_values = params[:available_values]
@default = params[:default]
@validations = params[:validations]
#in this way each validation is being added for all keys
Configuracao::Key.class_eval do
validates :value, params[:validations]
end
end
end
end
所以对于每个实例键,我都会在哈希中传递不同的验证,例如:
Key.new( validations: { presence: true, numericality: true } )
Key.new( validations: { length: { maximum: 30 } } )
有办法吗?
【问题讨论】:
-
上面的代码有问题吗?理论上,这应该有效
-
是的,如果我在实例 A 上添加数字验证,在实例 B 上添加长度验证,A 和 B 将执行相同的验证,以上两个
-
无需深入研究,您可能想尝试 instance_eval 而不是 class_eval:更多:jimmycuadra.com/posts/…
-
与 Configuracao::Key.instance_eval 相同......如果我更改为 self.instance_eval 我得到'未定义的方法'
-
@talski 你可以发布你的答案并接受它,这是回答你自己问题的首选方式。
标签: ruby-on-rails validation configuration