diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index 1ec27d6..dd8446b 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -4,10 +4,13 @@ class TagsController < ApplicationController def create image = @current_user.images.find(params[:image_id]) tag = params[:tag] - image.tags << tag + image.tags << tag unless image.tags.include? tag image.save - redirect_to([:user, image]) + respond_to do |format| + format.html { redirect_to([:user, image]) } + format.js { render "index", locals: { image: image, tags: image.tags } } + end end def destroy @@ -16,6 +19,9 @@ class TagsController < ApplicationController image.tags.delete(tag) image.save - redirect_to([:user, image]) + respond_to do |format| + format.html { redirect_to([:user, image]) } + format.js { render "index", locals: { image: image, tags: image.tags } } + end end end diff --git a/app/views/images/show.html.erb b/app/views/images/show.html.erb index ee8c6b9..7ad4c66 100644 --- a/app/views/images/show.html.erb +++ b/app/views/images/show.html.erb @@ -10,20 +10,10 @@
- + <%= render "tags/tags", image: @image, tags: @image.tags %>
- <%= form_tag user_image_tags_path(@image), method: :post do %> + <%= form_tag user_image_tags_path(@image), remote: true, method: :post do %> <%= text_field_tag :tag %> <%= submit_tag "Add Tag" %> <% end %> diff --git a/app/views/tags/_tag.html.erb b/app/views/tags/_tag.html.erb new file mode 100644 index 0000000..94001f9 --- /dev/null +++ b/app/views/tags/_tag.html.erb @@ -0,0 +1,8 @@ +
  • + <%= tag %> + <%= link_to "×".html_safe, + user_image_tag_path(image, tag), + method: :delete, + remote: true, + class: "delete-tag" %> +
  • diff --git a/app/views/tags/_tags.html.erb b/app/views/tags/_tags.html.erb new file mode 100644 index 0000000..2e7f0f2 --- /dev/null +++ b/app/views/tags/_tags.html.erb @@ -0,0 +1,5 @@ + diff --git a/app/views/tags/index.js.erb b/app/views/tags/index.js.erb new file mode 100644 index 0000000..3d26a8e --- /dev/null +++ b/app/views/tags/index.js.erb @@ -0,0 +1,4 @@ +document.getElementById("tag").value = ""; + +document.getElementById("image-tags") + .outerHTML = `<%= render "tags", image: image, tags: tags %>`;