关于如何调用方法的基本问题

时间:2011-08-31 16:28:38

标签: ruby-on-rails methods gem

我真的应该知道这一点......但我不知道。这是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错误'数据无效'

3 个答案:

答案 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上调用此方法。