2014-02-21 2 views
0

저는 RoR에 매우 익숙하며 데이터베이스에 200 개의 유사한 열을 추가하는 마이그레이션을 작성하려고합니다. 표의 각 인보이스에 대해 개별 항목으로 광고 항목을 수집하고 싶습니다. 각 인보이스는 최대 200 개의 항목을 가질 수 있습니다.레일스 이전에서 for 루프를 사용하는 방법은 무엇입니까?

def change 
    create_table :invoices do |t| 
    200.times do |i| 
     t.string :itemdescription_i 
     t.decimal :itemqty_i 
     t.decimal :itemunitprice_i 
     t.decimal :itemextendedprice_i 
    end 
    end 
end 

어떻게 루프를 사용하여 열을 만들 수 있습니다 여기에

내가 쓴 코드는 (그것은 내가 좋아하지 루프를가 그것을 싶습니다 않음)인가?

답변

2

송장 테이블에 invoice_item이라는 연결 테이블을 만드는 것이 좋습니다. 관련 인보이스 항목이 송장을 참조하는이 테이블에 추가됩니다. 그런 다음 코드에서 인보이스를 검색하고 invoice.invoice_items를 호출하면됩니다.

create_table :invoice_items do |t| 
    t.references :invoice 
    t.string :itemdescription 
    t.decimal :itemqty 
    t.decimal :itemunitprice 
    t.decimal :itemextendedprice 
    end 
+1

데이터베이스를 올바르게 구조화하는 방법을 보여줄 수있는 시간을 내 주셔서 감사합니다. – user3335830

1
200.times do |i| 
    t.string :"itemdescription_#{i}" 
    t.decimal :"itemqty_#{i}" 
    t.decimal :"itemunitprice_#{i}" 
    t.decimal :"itemextendedprice_#{i}" 
    end 

끔찍한 데이터베이스 디자인입니다.

+0

't.column'은 문자열을 사용합니다. 그리고''문자열''은 몹시 못생긴 것처럼 보입니까? :) –

+0

@SergioTulentsev 예, 물론, op의 동적 기호를 만드는 방법을 보여줍니다. 물론 문자열도 사용할 수 있습니다. – xdazz

관련 문제