我真的应该知道这一点......但我不知道。这是gem的文档中提供的方法Barby:
valid?()
这是我模型中正在运行的回调:
require 'barby'
require 'barby/barcode/bookland'
def barcode
if Barcodeimg.find_by_isbn_id(self.id).nil?
barcode = Barby::Bookland.new("'#{self.productidentifier_idvalue}'")
my_bc = Barcodeimg.new(:client_id => self.client_id, :isbn_id => self.id)
f = File.open("barcode.png", 'w+')
f.write barcode.to_png
my_bc.image = f
my_bc.save!
end
end
但是,有时我会收到“数据无效”错误,所以我显然要使用有效的错误?方法。但我不知道怎么称呼它。如果我做
if self.productidentifier_idvalue.valid?
我得到了
undefined method `valid?' for "9781551113180":String
编辑:更多错误:
如果我这样做
barcode = Barby::Bookland.new("'#{self.productidentifier_idvalue}'")
if barcode.valid?
#more
我得到Barby错误'数据无效'
答案 0 :(得分:2)
如果您在此处提供无效的ISBN
barcode = Barby::Bookland.new("'#{self.productidentifier_idvalue}'")
难怪它会给你data not valid
错误。检查self.productidentifier_idvalue
的值并确保它是12位数(可以看到验证代码的正则表达式here)。
<强>更新强>
将"'#{self.productidentifier_idvalue}'"
替换为self.productidentifier_idvalue
。你这样做的方式,你的表达结果是'123456789012'
,这是两个引号太多了。
此外,您实际上不需要致电valid?
,它已在初始化程序中完成,您可以看到here。
答案 1 :(得分:1)
根据异常,你在字符串上调用它,它不知道该方法。您需要在Barby :: Barcode实例所在的任何地方调用它。
根据文档“Bookland”是“纯”EAN-13数据的一个特例。
所以,也许做像
这样的事情bc = Barby::EAN13.new(productidentifier_idvalue)
bc.valid?
应该让你更接近你的目标
答案 2 :(得分:0)
有效吗?方法仅存在于Barcode class
实例的对象上您在String上调用此方法。