2011-01-25 3 views
3

Я новичок в рельсах и не понял, как вставлять данные в db.Вставка данных в рельсы

Я читаю CSV и хотел бы загрузить эти значения в db. Моя модель выглядит примерно так.

class Book < ActiveRecord::Base 
    belongs_to :subject 
end 

class Subject < ActiveRecord::Base 
    has_many :books 
end 

... и мои данные что-то вроде этого:

Science, Book A 
Science, Book B 
History, Book C 
Math, Book D 

Я расщепление строки CSV разделителя.

Как можно вставить данные таким образом, чтобы при существовании субъекта детская книжная запись будет добавлена ​​к существующей теме, но в том случае, если объект не существует, будет создан и новый объект?

Это лучший способ обойти это или кто-то может рекомендовать лучший подход.

ответ

0

Благодаря @idlefingers для этого:

subject = Subject.find_or_create_by_name("Science") 

subject.books.create(:name => "Book A") 
+2

Это можно значительно усовершенствовать, используя 'subject = Subject.find_or_create_by_name (" Science ") 'и' subject.books.create (: name => "Book A") ' – idlefingers

+0

Спасибо @idlefingers. –

2

Нет необходимости изобретать колесо. Добавьте строку заголовка в файл csv, сохраните его как subjects.csv, а затем используйте встроенную библиотеку приборов, чтобы загрузить данные: http://api.rubyonrails.org/classes/Fixtures.html

+0

Handy, FWIW, чтобы загрузить светильники, используйте «rake db: fixtures: load». Вы также можете экспортировать - см. Http://stackoverflow.com/questions/490507/best-way-to-export-a-database-table-to-a-yaml-file –

Смежные вопросы