我可以让自定义验证器使用表单中的数据吗?

时间:2014-06-25 21:01:42

标签: ruby-on-rails ruby validation ruby-on-rails-4

我正在尝试使用自定义验证程序来验证用户是否使用他们拥有的比特币地址注册。我将要求用户使用他们通过注册表单提交的比特币地址对随机的base64字符串进行签名,并将签名粘贴到同一表单中。

我使用gem bitcoin-cigs来验证签名但它只有在所有参数(record, attribute, value所需的validate_each除外)都是文字字符串时才有效,如下所示:

def validate_each(record, attribute, value)
  unless true == BitcoinCigs.verify_message("12vvMNrVrUJjg8xqibmidg6yLxwd3m2pYL", "G0kYthikuHCeLMi4PPrp1EhE23+JaIJJgi9vZ71xVMG0pHi0DzpQ3YzxF6R3oFcNC+vSW8Z1xTcWkg3Qg0tFx0s=", "HxmIaOCscmXVZueZ/AgOxA==")
    record.errors[attribute] << (options[:message] || "is invalid")
  end
end

我希望能够将用户输入的任何内容作为第一个参数传递给比特币地址字段,它们作为第二个参数输入到签名字段中,以及由辅助方法生成的base64字符串,并向用户显示为最后,像这样:

def validate_each(record, attribute, value, address = [CONTENT OF ADDRESS FIELD], signature = [CONTENT OF SIGNATURE FIELD], message = [GENERATED STRING])
  unless true == BitcoinCigs.verify_message(address, signature, message)
    record.errors[attribute] << (options[:message] || "is invalid")
  end
end

这可能还是有更好的方法?

我已经尝试了所有我能想到的东西并用Google搜索,但我无法弄明白。 我是一个完全的初学者,这是我做过的第一件用于任何事情的东西,所以如果这是一个愚蠢的问题,我很抱歉。

提前致谢!

1 个答案:

答案 0 :(得分:0)

由于您在record方法中获得了validate_each,我想您可以在{{1}内随时拨打record.address(或record.<any attribute or method you want> 1}}方法。由于记录应该在任何验证之前设置其属性,因此该字段的内容将从表单中设置。