Основной вопрос о том, как вызвать метод - PullRequest
1 голос
/ 31 августа 2011

Я действительно должен знать это ... но я не знаю.Вот метод, представленный в документации для драгоценного камня, 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 

Однако,иногда я получаю ошибку «data not valid», поэтому я, очевидно, хотел бы использовать действительный?метод.Но я не знаю, как это назвать.Если я делаю

  if self.productidentifier_idvalue.valid? 

Я получаю

undefined method `valid?' for "9781551113180":String

Редактировать: больше ошибок:

Если я делаю

barcode = Barby::Bookland.new("'#{self.productidentifier_idvalue}'")
if barcode.valid?
#more

Я получаю Барбиошибка «данные недействительны»

Ответы [ 3 ]

2 голосов
/ 31 августа 2011

Если вы указываете здесь неправильный ISBN

barcode = Barby::Bookland.new("'#{self.productidentifier_idvalue}'")

, неудивительно, что он выдает ошибку data not valid.Проверьте значение self.productidentifier_idvalue и убедитесь, что оно состоит из 12 цифр (регулярное выражение для проверки кода можно увидеть здесь ).

Обновление

Заменить "'#{self.productidentifier_idvalue}'" на self.productidentifier_idvalue.То, как вы это делаете, результат вашего выражения '123456789012', что на две кавычки слишком много.

Кроме того, вам не нужно вызывать valid?, это делается в инициализаторекак вы можете видеть здесь .

1 голос
/ 31 августа 2011

Согласно исключению, вы вызываете это для строки, которая не знает этот метод. Вы должны вызывать его там, где находится ваш экземпляр Barby :: Barcode.

Согласно документации «Bookland» является частным случаем «чистых» данных EAN-13.

Так, может быть, делать что-то вроде

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

Должны ли вы приблизиться к вашей цели

0 голосов
/ 31 августа 2011

Действительный? метод существует только для объектов, которые являются экземплярами класса штрих-кода

Вы вызываете этот метод для строки.

...