Skip to content

Commit 80add79

Browse files
author
Ryan Bigg
committed
Section 5.1.6: Implement creating tickets for a project
1 parent 32ccde2 commit 80add79

File tree

17 files changed

+170
-2
lines changed

17 files changed

+170
-2
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Place all the behaviors and hooks related to the matching controller here.
2+
# All this logic will automatically be available in application.js.
3+
# You can use CoffeeScript in this file: http://coffeescript.org/
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// Place all the styles related to the tickets controller here.
2+
// They will automatically be included in application.css.
3+
// You can use Sass (SCSS) here: http://sass-lang.com/
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class TicketsController < ApplicationController
2+
before_action :set_project
3+
before_action :set_ticket, only: [:show, :edit, :update, :destroy]
4+
5+
def new
6+
@ticket = @project.tickets.build
7+
end
8+
9+
def create
10+
@ticket = @project.tickets.build(ticket_params)
11+
12+
if @ticket.save
13+
flash[:success] = "Ticket has been created."
14+
redirect_to [@project, @ticket]
15+
else
16+
flash[:error] = "Ticket has not been created."
17+
render "new"
18+
end
19+
end
20+
21+
private
22+
def ticket_params
23+
params.require(:ticket).permit(:title, :description)
24+
end
25+
26+
def set_project
27+
@project = Project.find(params[:project_id])
28+
end
29+
30+
def set_ticket
31+
@ticket = @project.tickets.find(params[:id])
32+
end
33+
end
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
module TicketsHelper
2+
end

ticketee/app/models/project.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
class Project < ActiveRecord::Base
22
validates :name, presence: true
3+
4+
has_many :tickets
35
end

ticketee/app/models/ticket.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class Ticket < ActiveRecord::Base
2+
belongs_to :project
3+
4+
validates :title, presence: true
5+
validates :description, presence: true,
6+
length: { minimum: 10 }
7+
end

ticketee/app/views/projects/show.html.erb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,7 @@
1515
"Are you sure you want to delete this project?"
1616
},
1717
class: "delete" %>
18+
19+
<%= link_to "New Ticket",
20+
new_project_ticket_path(@project),
21+
class: "new" %>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<div class='col-md-4'>
2+
<%= simple_form_for [@project, @ticket] do |f| %>
3+
<% if @ticket.errors.any? %>
4+
<div id="error_explanation">
5+
<h2><%= pluralize(@ticket.errors.count, "error") %>
6+
prohibited this ticket from being saved:</h2>
7+
8+
<ul>
9+
<% @ticket.errors.full_messages.each do |msg| %>
10+
<li><%= msg %></li>
11+
<% end %>
12+
</ul>
13+
</div>
14+
<% end %>
15+
16+
<%= f.input :title %>
17+
<%= f.input :description %>
18+
19+
<%= f.button :submit, class: 'btn-primary' %>
20+
<% end %>
21+
</div>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<div class='row'>
2+
<h2>New Ticket</h2>
3+
4+
<%= render "form" %>
5+
</div>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<div id='ticket'>
2+
<h2><%= @ticket.title %></h2>
3+
<%= simple_format(@ticket.description) %>
4+
</div>

0 commit comments

Comments
 (0)