2011-08-31 5 views
1

나는 이것을 정말로 알아야한다. 그러나 나는 그렇지 않다. 내 모델의 기능 콜백 여기방법을 호출하는 방법에 대한 기본적인 질문

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 

때때로 나는 '데이터를 사용할 수 없습니다'오류가 발생, 그러나 여기에 보석에 대한 설명서에서 제공하는 방법, Barby입니다입니다 , 나는 분명히 유효하게 사용하고 싶습니다. 방법. 그러나 나는 그것을 어떻게 부르는 지 모른다.

나는 BARBY 오류 '유효하지 않은 데이터'를 얻을

내가

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

을 할 경우 자세한 오류 : 나는

if self.productidentifier_idvalue.valid? 

를 할 경우 나는

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

편집 수

+1

isbn id는 항상 유효합니까? '데이터 유효하지 않은 오류'는 그로부터 올 수 있습니다. –

+0

id는 앱에서 생성 한 기본 키 정수이므로 그대로 사용합니다. 나는 의도적으로 잘못된 ISBN13 (productidentifier_idvalue)을 부여했습니다. – snowangel

답변

2

여기

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

잘못된 ISBN을 부여하고 그것이 당신에게 data not valid 오류를 제공 당연합니다. self.productidentifier_idvalue의 값을 확인하고 코드가 12 진수인지 확인하십시오 (코드의 유효성을 검사하는 정규 표현식은 here입니다).

업데이트

self.productidentifier_idvalue"'#{self.productidentifier_idvalue}'"를 교체합니다. 당신이 그것을하는 방식으로 표현의 결과는 두 개의 따옴표가 너무 많이있는 '123456789012'입니다.

게다가 을 호출 할 필요가 없습니다. here을 볼 수 있듯이 이니셜 라이저에서 완료되었습니다.

+0

좋습니다. 정규식을 사용했습니다 : /^(97(8|9))?¥d{9}(\d|X)$/.match(self.productidentifier_idvalue), 일단 바코드를 생성하면 우리는 ISBN이 유효합니다. 양해 해 주셔서 감사합니다. – snowangel

+1

문제 없습니다. \ (9 (8 | 9)) \ d {9} (\ d | X) $ /'를 사용하면 좀 더 관용적 인 (self boolean 나는 맛을 추측한다 ;-)). –

1

예외에 따르면, 그 방법을 모르는 문자열에. Barby :: Barcode 인스턴스가있는 곳이면 어디서든 호출해야합니다.

설명서에 따르면 "Bookland"는 "순수한"EAN-13 데이터의 특수한 경우입니다.

그래서, 어쩌면 당신에게 당신의 목표

+0

얼마나 재미 있나, 방금 게시 한대로 q 편집을 시도했습니다. '데이터가 유효하지 않습니다'라는 오류가 발생합니다 (이것이 내가 보간법을 시도한 이유입니다). 흠. – snowangel

0

유효한에 가까이해야

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

같은 일을? 메서드는 인스턴스에있는 객체에만 존재합니다. Barcode class

String에서이 메서드를 호출하고 있습니다.

+0

아, 네.이 다음 시도가 효과가없는 이유를보기 위해 내 질문을 볼 수 있습니까? 고마워! – snowangel

관련 문제