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)