diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb
index 07dd0b6cd..e53509cc2 100644
--- a/app/controllers/posts_controller.rb
+++ b/app/controllers/posts_controller.rb
@@ -112,6 +112,12 @@ class PostsController < ApplicationController
end
end
+ def random
+ count = Post.fast_count(params[:tags])
+ @post = Post.tag_match(params[:tags]).offset(rand(count)).first
+ redirect_to post_path(@post, :tags => params[:tags])
+ end
+
private
def tag_query
params[:tags] || (params[:post] && params[:post][:tags])
diff --git a/app/views/posts/partials/index/_related.html.erb b/app/views/posts/partials/index/_related.html.erb
index 0632bae0e..9ec07248c 100644
--- a/app/views/posts/partials/index/_related.html.erb
+++ b/app/views/posts/partials/index/_related.html.erb
@@ -8,5 +8,7 @@
<% if @post_set.is_tag_subscription? %>
<%= link_to "Edit subscriptions", tag_subscriptions_path %>
<% end %>
+
+ <%= link_to "Random post", random_posts_path(:tags => params[:tags]) %>
diff --git a/app/views/posts/partials/show/_options.html.erb b/app/views/posts/partials/show/_options.html.erb
index 01312fa08..622847249 100644
--- a/app/views/posts/partials/show/_options.html.erb
+++ b/app/views/posts/partials/show/_options.html.erb
@@ -3,6 +3,7 @@
<%= link_to "Favorite", favorites_path(:post_id => post.id), :remote => true, :method => :post, :id => "add-to-favorites", :title => "Shortcut is F" %>
<%= link_to "Unfavorite", favorite_path(post), :remote => true, :method => :delete, :id => "remove-from-favorites" %>
<%= link_to "Edit", "#", :id => "side-edit-link" %>
+ <%= link_to "Random post", random_posts_path(:tags => params[:tags]) %>
<%= link_to "Add to pool", "#", :id => "pool" %>
<% if post.is_note_locked? %>
Note locked
diff --git a/config/routes.rb b/config/routes.rb
index d42eb5f24..c2a86084a 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -156,6 +156,7 @@ Danbooru::Application.routes.draw do
resources :votes, :controller => "post_votes", :only => [:create, :destroy]
collection do
get :home
+ get :random
end
member do
put :revert