diff --git a/app/assets/javascripts/posts.js b/app/assets/javascripts/posts.js index f74ba0783..910ac079c 100644 --- a/app/assets/javascripts/posts.js +++ b/app/assets/javascripts/posts.js @@ -324,13 +324,18 @@ data: { other_post_id: other_post_id }, - complete: function(data) { - if (data.status === 200) { - Danbooru.notice("Successfully copied notes to post #" + other_post_id + ""); + success: function(data) { + Danbooru.notice("Successfully copied notes to post #" + other_post_id + ""); + }, + error: function(data) { + if (data.status === 404) { + Danbooru.error("Error: Invalid destination post"); + } else if (data.responseJSON && data.responseJSON.reason) { + Danbooru.error("Error: " + data.responseJSON.reason); } else { Danbooru.error("There was an error copying notes to post #" + other_post_id + ""); } - }, + } }); } diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 7181104c5..07dd0b6cd 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -88,7 +88,13 @@ class PostsController < ApplicationController @post = Post.find(params[:id]) @other_post = Post.find(params[:other_post_id].to_i) @post.copy_notes_to(@other_post) - render :nothing => true + + if @post.errors.any? + @error_message = @post.errors.full_messages.join("; ") + render :json => {:success => false, :reason => @error_message}.to_json, :status => 400 + else + head :no_content + end end def unvote diff --git a/app/models/post.rb b/app/models/post.rb index 5058e8f3d..90b9c2eae 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -977,7 +977,14 @@ class Post < ActiveRecord::Base end def copy_notes_to(other_post) - return if notes.active.length == 0 + if id == other_post.id + errors.add :base, "Source and destination posts are the same" + return false + end + unless has_notes? + errors.add :post, "has no notes" + return false + end notes.active.each do |note| note.copy_to(other_post)