Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion app/controllers/movies_controller.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
class MoviesController < ApplicationController
before_action :set_movie, only: %i[ show edit update destroy ]
before_action :set_movie, only: %i[ show edit update destroy edit_title edit_duration edit_year edit_description edit_director_id ]

# GET /movies or /movies.json
def index
Expand Down Expand Up @@ -27,6 +27,7 @@ def create
if @movie.save
format.html { redirect_to @movie, notice: "Movie was successfully created." }
format.json { render :show, status: :created, location: @movie }
format.js
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @movie.errors, status: :unprocessable_entity }
Expand All @@ -40,6 +41,7 @@ def update
if @movie.update(movie_params)
format.html { redirect_to @movie, notice: "Movie was successfully updated." }
format.json { render :show, status: :ok, location: @movie }
format.js
else
format.html { render :edit, status: :unprocessable_entity }
format.json { render json: @movie.errors, status: :unprocessable_entity }
Expand All @@ -53,6 +55,7 @@ def destroy
respond_to do |format|
format.html { redirect_to movies_url, notice: "Movie was successfully destroyed." }
format.json { head :no_content }
format.js
end
end

Expand Down
2 changes: 1 addition & 1 deletion app/javascript/packs/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// a relevant structure within app/javascript and only use these pack files to reference
// that code so it'll be compiled.

import Rails from "@rails/ujs"
import Rails, { $ } from "@rails/ujs"; global.Rails = Rails;
import * as ActiveStorage from "@rails/activestorage"
import "channels"

Expand Down
1 change: 1 addition & 0 deletions app/models/actor.rb
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
class Actor < ApplicationRecord
has_many :characters, dependent: :destroy
end
1 change: 1 addition & 0 deletions app/models/director.rb
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
class Director < ApplicationRecord
has_many :movies, dependent: :destroy
end
2 changes: 2 additions & 0 deletions app/models/movie.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
class Movie < ApplicationRecord
belongs_to :director

has_many :characters, dependent: :destroy
end
4 changes: 4 additions & 0 deletions app/views/layouts/application.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@

<%= stylesheet_link_tag 'application', media: 'all' %>
<%= javascript_pack_tag 'application' %>
<script
src="https://code.jquery.com/jquery-3.6.0.min.js"
integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
crossorigin="anonymous"></script>
</head>

<body>
Expand Down
21 changes: 21 additions & 0 deletions app/views/movies/_movie.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<tr id="<%= dom_id(movie) %>">
<td>
<%= render "movies/movie/title", movie: movie %>
</td>
<td>
<%= render "movies/movie/year", movie: movie %>
</td>
<td>
<%= render "movies/movie/director_id", movie: movie %>
</td>
<td>
<%= render "movies/movie/description", movie: movie %>
</td>
<td>
<%= render "movies/movie/duration", movie: movie %>
</td>

<td>
<%= link_to 'Destroy', movie, method: :delete, remote: true %>
</td>
</tr>>
2 changes: 2 additions & 0 deletions app/views/movies/create.js.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
$("#movies").prepend("<%= j(render @movie)%>");
$("#new_movie_form").trigger("reset");
3 changes: 3 additions & 0 deletions app/views/movies/destroy.js.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
$("#<%= dom_id(@movie) %>").fadeOut(function() {
$(this).remove();
});
1 change: 1 addition & 0 deletions app/views/movies/edit_description.js.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
$("#<%= dom_id(@movie) %>_description").replaceWith("<%= j(render "movies/forms/description", movie: @movie)%>");
1 change: 1 addition & 0 deletions app/views/movies/edit_director_id.js.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
$("#<%= dom_id(@movie) %>_director_id").replaceWith("<%= j(render "movies/forms/director_id", movie: @movie)%>");
1 change: 1 addition & 0 deletions app/views/movies/edit_duration.js.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
$("#<%= dom_id(@movie) %>_duration").replaceWith("<%= j(render "movies/forms/duration", movie: @movie)%>");
1 change: 1 addition & 0 deletions app/views/movies/edit_title.js.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
$("#<%= dom_id(@movie) %>_title").replaceWith("<%= j(render "movies/forms/title", movie: @movie)%>");
1 change: 1 addition & 0 deletions app/views/movies/edit_year.js.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
$("#<%= dom_id(@movie) %>_year").replaceWith("<%= j(render "movies/forms/year", movie: @movie)%>");
10 changes: 10 additions & 0 deletions app/views/movies/forms/_description.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div id="<%= dom_id(movie) %>_description_form">
<%= form_with(model: movie, local: false) do |form| %>
<div class="field">
<%= form.label :description, for: "#{dom_id(movie)}_description" %>
<%= form.text_area :description, id: "#{dom_id(movie)}_description" %>
</div>

<%= form.submit %>
<% end %>
</div>
8 changes: 8 additions & 0 deletions app/views/movies/forms/_director_id.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<div id="<%= dom_id(movie) %>_director_id_form">
<%= form_with(model: movie, local: false) do |form| %>
<div class="field">
<%= form.label :director_id, for: "#{dom_id(movie)}_director_id" %>
<%= form.collection_select :director_id, Director.order(:name), :id, :name, {}, onchange: 'Rails.fire(this.form, "submit")', id: "#{dom_id(movie)}_director_id" %>
</div>
<% end %>
</div>
8 changes: 8 additions & 0 deletions app/views/movies/forms/_duration.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<div id="<%= dom_id(movie) %>_duration_form">
<%= form_with(model: movie, local: false) do |form| %>
<div class="field">
<%= form.label :duration, for: "#{dom_id(movie)}_duration" %>
<%= form.text_field :duration, id: "#{dom_id(movie)}_duration" %>
</div>
<% end %>
</div>
8 changes: 8 additions & 0 deletions app/views/movies/forms/_title.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<div id="<%= dom_id(movie) %>_title_form">
<%= form_with(model: movie, local: false) do |form| %>
<div class="field">
<%= form.label :title, for: "#{dom_id(movie)}_title" %>
<%= form.text_field :title, id: "#{dom_id(movie)}_title" %>
</div>
<% end %>
</div>
8 changes: 8 additions & 0 deletions app/views/movies/forms/_year.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<div id="<%= dom_id(movie) %>_year_form">
<%= form_with(model: movie, local: false) do |form| %>
<div class="field">
<%= form.label :year, for: "#{dom_id(movie)}_year" %>
<%= form.text_field :year, id: "#{dom_id(movie)}_year" %>
</div>
<% end %>
</div>
19 changes: 19 additions & 0 deletions app/views/movies/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,25 @@
</tr>
</thead>

<%= form_with(model: Movie.new, local: false, id: "new_movie_form") do |form| %>
<tr>
<td><%= form.label :title %>
<%= form.text_field :title %></td>
<td><%= form.label :description %>
<%= form.text_area :description %></td>
<td><%= form.label :duration %>
<%= form.number_field :duration %></td>
<td><%= form.label :year %>
<%= form.number_field :year %></td>
<td> <%= form.label :director_id %>
<%= form.collection_select :director_id, Director.order(:name), :id, :name %></td>
<td class="actions">
<%= form.submit %>
</td>
</tr>

<% end %>

<tbody>
<% @movies.each do |movie| %>
<tr>
Expand Down
18 changes: 18 additions & 0 deletions app/views/movies/movie/_description.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<div id="<%= dom_id(movie) %>_description">
<% if movie.description.blank? %>
<%= link_to movie_edit_description_path(movie), remote: true do %>
Add description
<% end %>
<% else %>
<details>
<summary>
Show description
</summary>

<%= simple_format movie.description %>
<%= link_to movie_edit_description_path(movie), remote: true do %>
Edit
<% end %>
</details>
<% end %>
</div>
9 changes: 9 additions & 0 deletions app/views/movies/movie/_director_id.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<div id="<%= dom_id(movie) %>_director_id">
<%= link_to movie_edit_director_id_path(movie), remote: true do %>
<% if movie.director.present? %>
<%= movie.director.name %>
<% else %>
Add director
<% end %>
<% end %>
</div>
9 changes: 9 additions & 0 deletions app/views/movies/movie/_duration.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<div id="<%= dom_id(movie) %>_duration">
<%= link_to movie_edit_duration_path(movie), remote: true do %>
<% if movie.duration.present? %>
<%= movie.duration %> minutes
<% else %>
Add duration
<% end %>
<% end %>
</div>
9 changes: 9 additions & 0 deletions app/views/movies/movie/_title.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<div id="<%= dom_id(movie) %>_title">
<%= link_to movie_edit_title_path(movie), remote: true do %>
<% if movie.title.present? %>
<%= movie.title %>
<% else %>
Add title
<% end %>
<% end %>
</div>
9 changes: 9 additions & 0 deletions app/views/movies/movie/_year.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<div id="<%= dom_id(movie) %>_year">
<%= link_to movie_edit_year_path(movie), remote: true do %>
<% if movie.year.present? %>
<%= movie.year %>
<% else %>
Add year
<% end %>
<% end %>
</div>
Empty file added app/views/movies/update.js.erb
Empty file.
8 changes: 7 additions & 1 deletion config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,11 @@
resources :characters
resources :actors
resources :directors
resources :movies
resources :movies do
get "title/edit" => "movies#edit_title", as: :edit_title
get "description/edit" => "movies#edit_description", as: :edit_description
get "duration/edit" => "movies#edit_duration", as: :edit_duration
get "year/edit" => "movies#edit_year", as: :edit_year
get "director_id/edit" => "movies#edit_director_id", as: :edit_director_id
end
end