2016-06-09 2 views
0

두 개의 HTML 테이블을 만들고 있습니다. 첫 번째 것은 완벽하고 두 번째 것은 내가하는 일과 상관없이 첫 번째 테이블과 동일한 HEAD를가집니다.'html-table'gem과 HTML 관련 문제 :: 테이블 :: 헤드

<table> 
    <thead> 
    <tr> 
     <td>1</td> 
     <td>2</td> 
     <td>3</td> 
    </tr> 
    </thead> 
    <tr> 
     <td>1</td> 
    </tr> 
    <tr> 
     <td>2</td> 
    </tr> 
</table> 

는 아무 문제가 없습니다 :이 puts table2.html의 결과가

<table> 
    <thead> 
    <tr> 
     <td>1</td> 
     <td>2</td> 
     <td>3</td> 
    </tr> 
    </thead> 
    <tr> 
     <td>1</td> 
    </tr> 
    <tr> 
     <td>2</td> 
    </tr> 
    <tr> 
     <td>3</td> 
    </tr> 
</table> 

입니다 : 이것은 puts table1.html의 결과가

require 'html/table' 
include HTML 

title1 = [1,2,3] 
data1 = [1,2,3] 

table1 = HTML::Table.new 
table1.push Table::Head.create{ |row| row.content = title1 } 
data1.each { |entry| table1.push Table::Row.new{|row| row.content = entry}} 

title2 = [1,2] 
data2 = [1,2] 

table2 = HTML::Table.new 
table2.push Table::Head.create{ |row| row.content = title2} 
data2.each { |entry| table2.push Table::Row.new{ |row| row.content = entry} 
} 

입니다 :

여기에 문제가있는 코드입니다 내용이 있지만 HEAD는 두 표에서 모두 동일하게 보입니다. 왜?

이 편집 : 나는 초기 코드를 조금 단순화했습니다 : 지금까지

`require 'html/table' 
include HTML 
s= Table::Head.create{ |row| row.content = 1 } 
m= Table::Head.create{ |row| row.content = 2 } 

puts s 
<td>1</td> 

puts m 
<td>1</td>` 

이 .inspect는 두 변수가 같은 인스턴스 객체를 저장하는 것을 보여줍니다두고>

puts s.inspect 
puts m.inspect 

[[#<HTML::Table::Row::Data:0x007ff52b096e38 @html_begin="<td", @html_body="1", @html_end="</td>">]] 
[[#<HTML::Table::Row::Data:0x007ff52b096e38 @html_begin="<td", @html_body="1", @html_end="</td>">]] 

답변

0

을 나는 알고하지 않았다 이 보석과 나는 왜 누군가가 자신의 코드베이스에 이것을 추가하고 싶은지 이해하지 못한다. 어떤 가치를 더합니까? 당신이없이 성취 할 수없는 보석으로 무엇을 성취합니까?

require 'html/table' 
include HTML 
s = Table::Head.create{ |row| row.content = 1 } 
m = Table::Head.create{ |row| row.content = 2 } 

puts s.object_id == m.object_id # => true 

소스 코드 (https://github.com/djberg96/html-table/blob/master/lib/html/head.rb#L18)을 보면 그때는 분명하다 : 그것은 create에서 반환 된 같은 객체 때문에

당신이 같은 출력을 볼 수있는 이유는 이 의도 행동 :

# This is our constructor for Head objects because it is a singleton 
    # class. Optionally, a block may be provided. If an argument is 
    # provided it is treated as content. 
    # 
    def self.create(arg=nil, &block) 
    @@head = new(arg, &block) unless @@head 
    @@head 
    end 

이 코드와 주석 <thead>에 따르면 싱글과에해야 존재하는 가 존재합니다.

도서관에 더 이상 보이지 않고 어떻게 작동하는지 보지 않고 : <thead>을 싱글 톤으로 취급하는 IMHO는 당황스럽고 바로이 라이브러리 사용을 중단해야하는 이유입니다. 호기심이 있으면 저자에게 연락 할 수 있습니다.

경험상, 클래스 수준 변수 (@@)가 있으면 문제가 발생합니다.

그럼 어떻게 할 수 있습니까?

레일스와 같은 웹 프레임 워크 외부에 HTML 테이블을 만들어야합니까? 당신은 할 수 : http://ruby-doc.org/stdlib-1.9.3/libdoc/rexml/rdoc/REXML.html

이이 두 솔루션 "내장"위치 : REXML을 사용할 수 있습니다 http://ruby-doc.org/stdlib-2.3.1/libdoc/erb/rdoc/ERB.html

  • HTML은 "단지 XML (TM)"그래서 :

    • 사용 ERB. 루비에서 즉시 사용할 수 있습니다. 하지만 다른 템플릿 솔루션 (햄, 슬림, ...)을 사용할 수도 있습니다.) 또는 REXML 인터페이스가 내가 생각하기에 가장 직설적이지 않기 때문에 다른 XML 생성기 (황소, 오가, 노코 기리) 또는 빌더/XML.

  • +0

    도움 주셔서 감사합니다. 나는 방금 루비를 배우기 시작했고 'html-table'은이 작업을위한 좋은 도구처럼 보였다. 나는 간단한 웹 응용 프로그램을 만드는 sinatra를 사용하고 있습니다. 몇 가지 예제가 필요하고 방금 언급 한 도구를 찾지 못했습니다. –

    +0

    다른 HTML 출력을 어떻게 생성합니까? 같은 템플릿 엔진으로 테이블을 만들면됩니다. –

    +0

    @MarkoStanojevic 제 답변이 도움이 되었다면 "올바른"것으로 표시하십시오. –