【问题标题】:Basic question about how to call a method关于如何调用方法的基本问题
【发布时间】:2011-11-07 18:50:10
【问题描述】:

我真的应该知道这个……但我不知道。这是 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 错误“数据无效”

【问题讨论】:

  • 您确定您的 isbn id 始终有效吗? data not valid error 可能来自那个。
  • id 是,因为它是应用创建的主键整数。我故意给它一个无效的 ISBN13 (productidentifier_idvalue)。

标签: ruby-on-rails methods gem


【解决方案1】:

如果您在此处提供的 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

【讨论】:

  • 太棒了。我使用了一个正则表达式: if /^(97(8|9))?\d{9}(\d|X)$/.match(self.productidentifier_idvalue) ,然后在我们知道ISBN 有效。感谢您对我的耐心等待!
  • 没问题。请注意,您也可以使用if self.productidentifier_idvalue =~ /^(97(8|9))?\d{9}(\d|X)$/,这更符合习惯(尽管我猜这一切都归结为品味;-))。
【解决方案2】:

根据异常,您正在对不知道该方法的字符串调用 this。您需要在 Barby::Barcode 实例所在的任何位置调用它。

根据文档,“Bookland”是“纯”EAN-13 数据的一个特例。

所以,也许做一些类似的事情

bc = Barby::EAN13.new(productidentifier_idvalue)
bc.valid?

应该让你更接近你的目标

【讨论】:

  • 真有趣,我刚刚在您发布的内容中尝试过,请参阅 q 编辑。它抛出“数据无效”错误(这就是我尝试插入数字的原因)。嗯。
【解决方案3】:

有效吗?方法仅存在于作为 Barcode class 实例的对象上

你在一个字符串上调用这个方法。

【讨论】:

  • 哦,是的,呵呵。你能看到我的问题编辑,看看为什么下一次尝试不起作用?塔!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多