You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

173 lines
3.4 KiB

# Books_app
- Create a rails app called `books_app`
- Create a books controller
- Populate it with the following...
```
class BooksController < ApplicationController
def index
# Fake DB ORM call
puts "============="
@all_books = $BOOKS
p @all_books
puts "============="
end
def show
# Get the id via params
id = params[:id].to_i
puts "============="
puts id
puts id.class
puts "============="
@book = {}
$BOOKS.each do |book|
if book[:id] === id
@book = book
puts "============="
puts "book found"
puts "============="
end
end
# Remember, just putting the final variable makes it implicitly return
@book
# More statements to test
puts "================"
p @book
puts "================"
end
def new
@book = Book.new
end
def create
name = book_params[:title]
nickname = book_params[:author]
new_id = $BOOKS.length + 1
$BOOKS << { id: new_id, title: title, author: author}
redirect_to :root
end
def edit
id = params[:id].to_i
puts "============="
puts id
puts id.class
puts "============="
find_book = {}
$BOOKS.each do |book|
if book[:id] === id
find_book = book
puts "============="
puts "book found"
puts "============="
end
end
@book_teacher = Book.new(find_book)
@book = @existing_book
end
def update
id = params[:id].to_i
new_title = book_params[:title]
new_author = book_params[:author]
$BOOKS.each do |book|
if book[:id] == id
book[:title] = new_title
book[:authoer] = new_author
end
end
redirect_to :root
end
def destroy
id = params[:id].to_i
$BOOKS.each do |book|
if book[:id] == id
$BOOKS.delete(book)
end
end
redirect_to :root
end
private
def book_params
params.require(:book).permit(:title, :author)
end
end
```
- Add dummy book data. Inside configs->initializers
- create `books.rb`
- populate it with the following...
```
$BOOKS = [
{
id: 1,
title: "The Book of Awesomesauce",
author: "Joe"
},
{
id: 2,
title: "The Book of coolness",
author: "Matt",
},
{
id: 3,
title: "Death is yummy",
author: "Thom"
}
]
```
- Create your routes using resources on books.
- Create a tableless model so that we can use dummy data
- Inside app/models
- create `books.rb`
- populate it with the following...
```
class Book
include ActiveModel::Model
attr_accessor :title, :author, :id
validates :title, :author, presence: true
end
```
- Build out views
- Create a folder for books
- Create the corresponding html.erb files for the following
- index.html.erb
- edit.html.erb
- new.html.erb
- show.html.erb
- _form.html.erb
- Create links using the link_for helper to attach the user's experience to navigate the show and delete actions off the index page.
- Be sure to play with the path prefixing off the rake routes.
- Create a link to show for each book off the index page.
- Use the following to create the _form.html.erb
```
<%= form_for @book do |form| %>
Name: <%= form.text_field :title %><br>
Nickname: <%= form.text_field :author %><br>
<%= form.submit %>
<% end %>
```
- Use the `_form.html.erb` partial for the edit.html.erb and the new.html.erb
- Note that the edit form will continue to add a new instance of book, don't worry about this bug.
#### Rely on the various notes from today and the reference code as well as start looking up rails documentation and SO's.