More Rails!
UD, Validations, Associations, Params
Last Week
- Index
- Show
- New
- Create
Today:
- Models:
- Validations
- Associations
- Controller:
- Strong parameters
- Gems
- Destroy
- Edit
- Update
AND
CR UD
Create, read, update, destroy
- Shows the form where you can edit your model
- Similar to create, except the fields are filled in for you
- Submits to the Update action
Edit
/users/5/edit (GET)
@user = User.find(params[:id)
- Actually updates your model with the fields given
- Usually redirects to another page.
Update
/users/5 (PUT)
user = User.find(params[:id)
user.update_attributes(user_params)
Destroy
- Destroys the model with given id.
/users/5 (DELETE)
user = User.find(params[:id])
user.destroy
class UsersController < ApplicationController
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
redirect_to user_path(@user)
else
render 'edit'
end
end
def destroy
@user = User.find(params[:id])
@user.destroy
redirect_to root_path
end
private
def user_params
params.require(:user).permit(:name)
end
end
YOU ARE HERE
Model
Validations
Validations
validates :attribute, { validators }
OR
validates_validator_of [ :attributes ]
Associations
-
has_many
- A Student has many Grades
-
belongs_to
- Grades belong to Students
Associations
class Student < ActiveRecord::Base
has_many :grades
end
class Grade < ActiveRecord::Base
belongs_to :student
end
name | age | major | id |
---|---|---|---|
Bob | 20 | EECS | 1 |
Alice | 19 | Bio | 2 |
id | grade | student_id |
---|---|---|
100 | 4 | 1 |
101 | 3 | 1 |
Primary Key
Foreign Key
name | age | major | id |
---|---|---|---|
Bob | 20 | EECS | 1 |
Alice | 19 | Bio | 2 |
id | grade | student_id |
---|---|---|
100 | 4 | 1 |
101 | 3 | 1 |
Primary Key
Foreign Key
Associations
student = Student.find(1)
student.grades
Controller
Quick Review: Params
- Dictionary that contains information about the request made. (Controller, action, url, etc.)
def show
@user = User.find params[:id]
end
- Also contains form parameters, url parameters, ids, etc.
Params
class PostsController < ApplicationController
def index
@post = Post.new
@posts = Post.all
end
def create
puts params
@post = Post.new post_params
@post.save
redirect_to root_path
end
def like
end
private
def post_params
params.require(:post).permit(:text)
end
endclass PostsController < ApplicationController
def index
@post = Post.new
@posts = Post.all
end
def create
puts params
@post = Post.new post_params
@post.save
redirect_to root_path
end
def like
end
private
def post_params
params.require(:post).permit(:text)
end
end
Params
Problem:
User
- name
- age
- major
- admin
Strong parameters
Problem:
User
- name
- age
- major
- admin
Strong parameters
BUT
curl -d "user[name]=Charles"
-d "user[major]=EECS"
-d "user[age]=20"
-d "user[admin]=true"
http://localhost:3000/users
Strong Params
- Define whitelisted attributes that you can create a model with.
def user_params
params.require(:user).permit(:name, :age, :major)
end
curl -d "user[name]=Charles"
-d "user[major]=EECS"
-d "user[age]=20"
-d "user[admin]=true"
http://localhost:3000/users
Strong Params
def create
@user = User.new params[:user]
end
def create
@user = User.new user_params
end
private
def user_params
params.require(:user).permit(:name, :age, :major)
end
BECOMES
Gems
https://rubygems.org/gems
gem 'sqlite3' => gem 'pg'
Example:
Live Demo
What did we learn today?
Project 1
https://github.com/rails-decal/proj1
Individual Project - Due Friday, October 23rd
Fall 2015 - Week 5: GrabBag Rails
By Rails Decal
Fall 2015 - Week 5: GrabBag Rails
- 1,143