class QuotesController < ApplicationController def index @quote = Quote.find(310) @qnumber = Quote.published.count @mnumber = Quote.pending.count end def latest @quotes = Quote.published.order(id: :desc).paginate(page: params[:page], per_page: 10) respond_to do |format| format.html { render :list } format.json { render :json => @quotes } format.xml { render :xml => @quotes } format.atom { render :atom => @quotes } end end def top @quotes = Quote.published.order(Arel.sql("(upvotes - downvotes) DESC")).paginate(page: params[:page], per_page: 10) respond_to do |format| format.html { render :list } format.json { render :json => @quotes } format.xml { render :xml => @quotes } end end def random picked = Quote.ids.sample redirect_to quote_url(picked) end def tags @tags = Quote.published.tag_counts_on(:tags) end def tag @quotes = Quote.published.tagged_with(params[:id]).order(id: :desc).paginate(page: params[:page], per_page: 10) respond_to do |format| format.html { render :list } format.json { render :json => @quotes } format.xml { render :xml => @quotes } end end def show @quote = Quote.published.find(params[:id]) respond_to do |format| format.html format.json { render :json => @quote } format.xml { render :xml => @quote } end end def new @quote = Quote.new end def create @quote = Quote.new(quote_params) @quote.submitter = nil if @quote.submitter.empty? if user_signed_in? @quote.state = :published @quote.save! flash[:notice] = "Thank you for submitting your quote!" redirect_to @quote else flash[:error] = "There was an error." render :new end end def upvote @quote = Quote.published.find(params[:id]) respond_to do |format| if @quote.upvote! request.remote_ip format.html do flash[:notice] = "You have upvoted Quote \"#{@quote.id}\"." redirect_to @quote end format.js { render "voted" } format.xml { head :ok } else format.html do flash[:notice] = "You have already voted on Quote \"#{@quote.id}\"." redirect_to @quote end format.xml { render :xml => { :error => "Someone from your IP address has already voted on this quote."} } end end end def downvote @quote = Quote.published.find(params[:id]) respond_to do |format| if @quote.downvote! request.remote_ip format.html do flash[:notice] = "You have downvoted Quote \"#{@quote.id}\"." redirect_to @quote end format.js { render "voted" } format.xml { head :ok } else format.html do flash[:notice] = "You have already voted on Quote \"#{@quote.id}\"." redirect_to @quote end format.xml { render :xml => { :error => "Someone from your IP address has already voted on this quote."} } end end end private def quote_params params.require(:quote).permit(:content, :notes, :submitter, :tag_list) end end