parent/child CRUD complete

This commit is contained in:
Mark Moser 2015-10-03 19:16:46 -05:00
parent 0510f1c4c2
commit 7afe8d137c
17 changed files with 144 additions and 26 deletions

View File

@ -4,5 +4,43 @@ class ChildrenController < ApplicationController
respond_with @children respond_with @children
end end
def lookup; end def show
@child = Child.includes(:parents).find_by_id(params[:id])
@parents = Person.order(:first_name, :last_name)
end
def new
@child = Child.new
end
def edit
@child = Child.find_by_id(params[:id])
end
def add
@child = Child.create child_params
if @child.persisted?
redirect_to child_path(@child), notice: 'Created!'
else
render :new
end
end
def update
@child = Child.find_by_id params[:id]
if @child.update child_params
redirect_to child_path(@child), notice: 'Updated!'
else
render :edit
end
end
private
def child_params
params.require(:child).permit(
:first_name,
:last_name
)
end
end end

View File

@ -1,8 +1,8 @@
class DocsController < ApplicationController class DocsController < ApplicationController
def index def index
@doc = { @doc = {
name: "sms-pager-api", name: "sms-pager",
documentation: "https://bitbucket.org/markamoser/sms-pager-api" documentation: "https://bitbucket.org/markamoser/sms-pager"
} }
respond_with @doc respond_with @doc
end end

View File

@ -15,7 +15,7 @@ class ParentsController < ApplicationController
end end
def add def add
@parent = Person.create add_parent_params @parent = Person.create parent_params
if @parent.persisted? if @parent.persisted?
redirect_to parent_path(@parent), notice: 'Success!' redirect_to parent_path(@parent), notice: 'Success!'
@ -30,9 +30,19 @@ class ParentsController < ApplicationController
@more_children = Child.all @more_children = Child.all
end end
def update
@parent = Person.find(params[:id])
if @parent.update(parent_params)
redirect_to parent_path(@parent), notice: 'Success!'
else
render :edit
end
end
private private
def add_parent_params def parent_params
params.require(:parent).permit( params.require(:parent).permit(
:first_name, :first_name,
:last_name, :last_name,

View File

@ -13,7 +13,7 @@ class Person < ActiveRecord::Base
scope :just_parents, lambda { scope :just_parents, lambda {
joins(:children) joins(:children)
.order(:first_name) .order(:first_name, :last_name)
.uniq .uniq
} }

View File

@ -0,0 +1,14 @@
- if @child.errors.full_messages.any?
.errors
%h1 Uh oh!
- @child.errors.full_messages.each do |error|
%p= error
= form_for @child, as: :child, url: add_child_path do |f|
= f.label :first_name
= f.text_field :first_name
= f.label :last_name
= f.text_field :last_name
= f.submit

View File

@ -1,3 +1,4 @@
%ul.sub-nav %ul.sub-nav
%li= link_to 'look up', lookup_child_path %li= link_to 'List', list_children_path
%li= link_to 'New', new_child_path

View File

@ -0,0 +1,5 @@
%h2 Edit #{@child.name}
%p= link_to 'back', child_path(@child)
= render partial: 'form'

View File

@ -2,7 +2,11 @@
- @children.each do |child| - @children.each do |child|
%ul %ul
%li= child.name %li
= link_to child.name, child_path(child)
= link_to 'edit', edit_child_path(child)
%ul %ul
- child.parents.each do |parent| - child.parents.each do |parent|
%li #{parent.name} #{page_link(parent)} %li
= link_to parent.name, parent_path(parent)
= page_link(parent)

View File

@ -0,0 +1,3 @@
%h2 Add a New Child
= render partial: 'form'

View File

@ -0,0 +1,18 @@
%h2= @child.name
%p= link_to 'edit', edit_child_path(@child)
- unless @child.parents.empty?
%p Parents:
%ul
- @child.parents.each do |parent|
%li
= link_to parent.name, parent_path(parent)
= link_to 'remove', del_parenthood_path(parent, @child), method: :delete
%p Add Parent:
= form_tag add_parent_to_child_path(@child) do
:ruby
select_options = options_from_collection_for_select(@parents, :id, :name)
html_options = { include_blank: true }
= select_tag(:parent, select_options, html_options)
= submit_tag 'Add Parent to Child'

View File

@ -1,4 +1,2 @@
%h2 Something helpful later %h2 Something helpful later
%p= raw(ap @doc) %p= raw(ap @doc)

View File

@ -0,0 +1,24 @@
%h2 Edit #{@parent.name}
%p= link_to 'back', parent_path(@parent)
- if @parent.errors.full_messages.any?
.errors
%h1 Uh oh!
- @parent.errors.full_messages.each do |e|
%p= e
= form_for @parent, as: :parent, url: update_parent_path do |f|
= f.label :first_name
= f.text_field :first_name
= f.label :last_name
= f.text_field :last_name
= f.label :phone
= f.phone_field :phone
= f.label :email
= f.email_field :email
= f.submit

View File

@ -2,12 +2,12 @@
- @parents.each do |parent| - @parents.each do |parent|
%ul %ul
%li= link_to parent.name, parent_path(parent)
%li %li
= link_to parent.name, parent_path(parent) = number_to_phone parent.phone
= page_link(parent) = page_link(parent)
%li= number_to_phone parent.phone %li= mail_to parent.email, nil, encode: 'hex'
%li= mail_to parent.email
%li Children: %li Children:
%ul %ul
- parent.children.each do |child| - parent.children.each do |child|
%li= child.name %li= link_to child.name, child_path(child)

View File

@ -8,7 +8,7 @@
%ul %ul
- @parent.children.each do |child| - @parent.children.each do |child|
%li %li
= child.name = link_to child.name, child_path(child)
= link_to 'remove', del_parenthood_path(@parent, child), method: :delete = link_to 'remove', del_parenthood_path(@parent, child), method: :delete
%p Add Child: %p Add Child:

View File

@ -1,2 +1 @@
%ul.sub-nav -# %ul.sub-nav

View File

@ -1,2 +1 @@
%ul.sub-nav -# %ul.sub-nav

View File

@ -1,16 +1,21 @@
Rails.application.routes.draw do Rails.application.routes.draw do
get 'parents', to: 'parents#index', as: :list_parents get 'parents', to: 'parents#index', as: :list_parents
get 'parents/new', to: 'parents#new', as: :new_parent get 'parent/new', to: 'parents#new', as: :new_parent
post 'parents/new', to: 'parents#add', as: :add_parent post 'parent/new', to: 'parents#add', as: :add_parent
get 'parents/edit/:id', to: 'parents#edit', as: :edit_parent get 'parent/edit/:id', to: 'parents#edit', as: :edit_parent
get 'parents/:id', to: 'parents#show', as: :parent get 'parent/:id', to: 'parents#show', as: :parent
post 'parents/:id', to: 'parents#update', as: :update_parent patch 'parent/:id', to: 'parents#update', as: :update_parent
post 'parenthood/child/:child', to: 'relationships#add_child', as: :add_parent_to_child
post 'parenthood/:parent/', to: 'relationships#add_child', as: :add_parenthood post 'parenthood/:parent/', to: 'relationships#add_child', as: :add_parenthood
delete 'parenthood/:parent/:child', to: 'relationships#del_child', as: :del_parenthood delete 'parenthood/:parent/:child', to: 'relationships#del_child', as: :del_parenthood
get 'children', to: 'children#index', as: :list_children get 'children', to: 'children#index', as: :list_children
get 'children/lookup', to: 'children#lookup', as: :lookup_child get 'child/new', to: 'children#new', as: :new_child
post 'child/new', to: 'children#add', as: :add_child
get 'childdit/:id', to: 'children#edit', as: :edit_child
get 'child/:id', to: 'children#show', as: :child
patch 'child/:id', to: 'children#update', as: :update_child
get 'staff', to: 'staff#index', as: :list_staff get 'staff', to: 'staff#index', as: :list_staff