좋아, 그럼 데이터베이스를 정규화하기 시작했습니다. 현재 카테고리 이름과 판매자 이름이있는 제품을 포함하는 데이터 피드 (XML)를 통해 약 60,000 개의 제품이 채워지는 하나의 모델 "제품"이 있습니다. 나는 이것을 3 가지 모델로 나누고 싶다; 제품, 카테고리 및 상인.두 테이블 간의 링크를 만드는 방법
각 제품이 하나 개의 범주와 자연 아이디어는 이러한 모델 만드는 것입니다 수 있도록 한 상인 :
CATEGORY_ID을 | category_name
merchant_id | merchant_name
has_one, belongs_to 등의 모델을 연결하는 코드를 만들 수 있지만, 새로운 제품을 카테고리와 판매자와 자동으로 연결하는 데 어려움을 겪고 있습니다.
저는 빈 데이터베이스로 시작하는 책에서 예제를 보았습니다. 매우 간단한 것처럼 보입니다. 그러나 전체 데이터베이스와 범주 이름 목록부터 시작하겠습니다.
이 여기에 큰 노력하고 내 제품 생성 성명 : (난 다음이 BTW 잘못 알고있다!), 카테고리 라인 ... :
Product.create(:name => node.xpath("./text/name/text()").inner_text.downcase,
:description => node.xpath("./text/desc/text()").inner_text,
:brand => node.xpath("./brand/text()").inner_text,
:merchant => node.xpath("../@name").inner_text,
:category => node.xpath("./cat/text()").inner_text.downcase,
:price => "£" + node.xpath("./price/btext()").inner_text)
내가 같은 것을 할 필요가있을 것이다,을 참조하십시오
Product.create(:name => node.xpath("./text/name/text()").inner_text.downcase,
:description => node.xpath("./text/desc/text()").inner_text,
:brand => node.xpath("./brand/text()").inner_text,
:merchant => node.xpath("../@name").inner_text,
:category => << Category.find_by_name(node.xpath("./cat/text()").inner_text.downcase),
:price => "£" + node.xpath("./price/btext()").inner_text)
아이디어가 있으십니까? 이것도 이해가 되니? 대규모 데이터 세트를 위해 시간이 걸릴 것입니다
Product.all do |product|
product.category = Category.find_or_create_by_category_name(product.category_name)
product.merchant = Merchant.find_or_create_by_merchant_name(product.merchant_name)
product.save!
end
: 그래서, 당신이 뭔가를 할 수있는, 열을 가정
안녕하세요, 제 질문에 이미 대답했지만 이미 위의 코드 샘플을 추가 한 것 같습니다. – Zinc
'Category.find_by_name'을'Category.find_or_create_by_name'으로 바꾸고,'상인 '에게 똑같은 일을시키는 것이 트릭을해야한다고 생각합니다. – zetetic
이렇게하면 실제로 products 테이블의 : category 값을 category_id로 설정하거나 값을 category_name으로 설정합니까? – Zinc