2013-07-16 9 views
0

Ruby 응용 프로그램에서 Redcloth를 사용하려하고 있는데 두 개의 인수 만 있어도 wrong number of arguments (3 for 2) 오류가 발생합니다. http://redcloth.rubyforge.org/classes/RedCloth/Formatters/HTML.html#M000052 여기Redcloth를 사용하여 "잘못된 인수 수 (2에 대해 3)"가 나타나는 이유는 무엇입니까?

def clean_html(text, allowed_tags = BASIC_TAGS) 
    text.gsub!(/<!\[CDATA\[/, '') 
    text.gsub!(/<(\/*)([A-Za-z]\w*)([^>]*?)(\s?\/?)>/) do |m| 
    raw = $~ 
    tag = raw[2].downcase 
    if allowed_tags.has_key? tag 
    pcs = [tag] 
    allowed_tags[tag].each do |prop| 
     ['"', "'", ''].each do |q| 
     q2 = (q != '' ? q : '\s') 
     if raw[3] =~ /#{prop}\s*=\s*#{q}([^#{q2}]+)#{q}/i 
      attrv = $1 
      next if (prop == 'src' or prop == 'href') and not attrv =~ %r{^(http|https|ftp):} 
      pcs << "#{prop}=\"#{attrv.gsub('"', '\\"')}\"" 
      break 
     end 
     end 

내 로그입니다 :

def self.cleanup(string) 
    if string == "" || string == nil 
    "" 
    else 

      string = self.iconvert(string, "ascii", "utf8") 

    RedCloth.include(RedCloth::Formatters::HTML) 
    redcloth = RedCloth.new(string) 
    redcloth.html_esc(string) 
    string = string.strip 
    string = string.gsub(/''/,"\"") 
    string = string.gsub(/\r/," ") 
    string = string.gsub(/\n/," ") 
    string = string.gsub(/\<br \/\>/," ") 
    string = string.gsub(/\<br\/\>/," ") 
    string = string.gsub(/&nbsp;/," ") 
    redcloth.clean_html(string, {}) 
    string 
    end 
end 

이 소스 코드입니다 : 여기

내 코드의

I, [2013-07-16T12:22:53.095073 #12321] INFO -- : wrong number of arguments (3 for 2) 
I, [2013-07-16T12:22:53.095281 #12321] INFO -- : /home/emai/.rvm/gems/[email protected]/gems/RedCloth-4.2.9/lib/redcloth/formatters/base.rb:46:in `method_missing' 
+0

좋습니다. – Edmund

답변

0

당신은 오류가 발생하고이 때문에의 정의 method_missing에 Redcloth 소스 파일 (base.rb)이 정의되어 있습니다. h는 두 개의 인수 (그리고 splat 연산자 없음)이고 메소드 이름에 추가 될 때 세 개의 인수가 method_missing으로 전달되는 두 개의 인수로 정의되지 않은 메소드를 호출합니다.

불쾌한 전화는 redcloth.clean_html에 대한 전화 인 것 같습니다. 귀하의 의견에 언급했듯이 clean_html은 개인적인 방법이므로 정상적인 object.method 호출 메커니즘을 통해 액세스 할 수 없습니다.

+0

헤이 피터, 네가 뭔가있는 것 같아. 모듈을 부적절하게 포함하고 있다고 생각합니다. 어떻게 내 메소드에'RedCloth :: Formters :: HTML'을 포함시키고 그것을 호출할까요? – Edmund

+0

Ruby를 위해 믹싱을해야하는 것처럼 속도가 빠르지는 않지만, 단지 * 사용 * 보석을 원한다면 일반적으로 소스 파일을 '요구'합니다. 당신이'include'를 사용하고 있기 때문에, 당신은 당신이 원하는 것이 아닌, 현재의 클래스 정의로 그 메소드들을 효과적으로 혼합하고 있습니다. –

+0

보석 사용 방법을 결정하기 위해 다음과 같은 문서가 있습니까? –