● videoSpina
Importing Data With Migrations

Unlock Revisiting Ruby on Rails
Subscribe for full access to every course, or buy this one on its own.
SECTION
Spina
NEXT UP
Making Your Own Embed
COURSE
Rails Revisited
33 lessons
About this lesson
I'm not a huge fan of migrations as I like having control of my SQL bits, however they can be extremely useful for small operations like data imports.
To create my Courses resource and import the data in, I had to use the following migration:
<span class="hljs-keyword">class</span> <span class="hljs-title class_">AddCoursesAndLessonsToSpina</span> < <span class="hljs-title class_ inherited__">ActiveRecord::Migration</span>[<span class="hljs-number">7.1</span>]
<span class="hljs-keyword">def</span> <span class="hljs-title function_">up</span>
res = <span class="hljs-title class_">Spina</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:Resource</span>.create!(<span class="hljs-symbol">id:</span> <span class="hljs-number">1</span>, <span class="hljs-symbol">name:</span> <span class="hljs-string">"courses"</span>, <span class="hljs-symbol">label:</span> <span class="hljs-string">"Courses"</span>)
courses = <span class="hljs-title class_">Course</span>.all
courses.each <span class="hljs-keyword">do</span> |<span class="hljs-params">course</span>|
page = <span class="hljs-title class_">Spina</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:Page</span>.create!(
<span class="hljs-symbol">title:</span> course.name,
<span class="hljs-symbol">slug:</span> course.sku,
<span class="hljs-symbol">resource_id:</span> <span class="hljs-number">1</span>,
<span class="hljs-symbol">view_template:</span> <span class="hljs-string">"course"</span>,
<span class="hljs-symbol">json_attributes:</span>{
<span class="hljs-symbol">en_content:</span> [
{<span class="hljs-symbol">name:</span> <span class="hljs-string">"slug"</span>, <span class="hljs-symbol">content:</span> course.sku, <span class="hljs-symbol">type:</span> <span class="hljs-string">"Spina::Parts::Line"</span>},
{<span class="hljs-symbol">name:</span> <span class="hljs-string">"body"</span>, <span class="hljs-symbol">content:</span> course.description, <span class="hljs-symbol">type:</span> <span class="hljs-string">"Spina::Parts::Text"</span>},
{<span class="hljs-symbol">name:</span> <span class="hljs-string">"summary"</span>, <span class="hljs-symbol">content:</span> course.summary, <span class="hljs-symbol">type:</span> <span class="hljs-string">"Spina::Parts::Line"</span>},
]
}
)
course.lessons.each <span class="hljs-keyword">do</span> |<span class="hljs-params">lesson</span>|
<span class="hljs-title class_">Spina</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:Page</span>.create!(
<span class="hljs-symbol">title:</span> lesson.title,
<span class="hljs-symbol">slug:</span> lesson.slug,
<span class="hljs-symbol">ancestry:</span> page.id,
<span class="hljs-symbol">resource_id:</span> <span class="hljs-number">1</span>,
<span class="hljs-symbol">view_template:</span> <span class="hljs-string">"lesson"</span>,
<span class="hljs-symbol">json_attributes:</span>{
<span class="hljs-symbol">en_content:</span> [
{<span class="hljs-symbol">name:</span> <span class="hljs-string">"slug"</span>, <span class="hljs-symbol">content:</span> lesson.slug, <span class="hljs-symbol">type:</span> <span class="hljs-string">"Spina::Parts::Line"</span>},
{<span class="hljs-symbol">name:</span> <span class="hljs-string">"vimeo"</span>, <span class="hljs-symbol">content:</span> lesson.vimeo_id, <span class="hljs-symbol">type:</span> <span class="hljs-string">"Spina::Parts::Line"</span>},
{<span class="hljs-symbol">name:</span> <span class="hljs-string">"summary"</span>, <span class="hljs-symbol">content:</span> lesson.summary, <span class="hljs-symbol">type:</span> <span class="hljs-string">"Spina::Parts::Line"</span>},
{<span class="hljs-symbol">name:</span> <span class="hljs-string">"body"</span>, <span class="hljs-symbol">content:</span> lesson.description, <span class="hljs-symbol">type:</span> <span class="hljs-string">"Spina::Parts::Text"</span>},
]
}
)
<span class="hljs-keyword">end</span>
<span class="hljs-keyword">end</span>
<span class="hljs-keyword">end</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">down</span>
<span class="hljs-title class_">Spina</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:Page</span>.where(<span class="hljs-symbol">resource_id:</span> <span class="hljs-number">1</span>).destroy_all
<span class="hljs-title class_">Spina</span><span class="hljs-symbol">:</span><span class="hljs-symbol">:Resource</span>.where(<span class="hljs-symbol">id:</span> <span class="hljs-number">1</span>).destroy_all
<span class="hljs-keyword">end</span>
<span class="hljs-keyword">end</span>
Unlock Revisiting Ruby on Rails
Subscribe for full access to every course, or buy this one on its own.