My partial, which is located in views/votes/_voter.html.erb, is not rendering in the browser and not triggering any errors when I place the rendering code in the answers/show.html.erb file. I've already combed through all of the questions and answers related to partials in rails on SO, and can't find anything exactly related to what is happening here. If anyone can help shed any light on the problem, I'd really appreciate it!
answers/show.html.erb file:
<p id="notice"><%= notice %></p>
<%= render partial: 'votes/voter', locals: { answer: @answer } %>
<p>
<strong>Body:</strong>
<%= @answer.body %>
</p>
<%= link_to 'Edit', edit_answer_path(@answer) %> |
<%= link_to 'Back', answers_path %>
views/votes/_voter.html.erb file:
<% if policy( Vote.new ).create? %>
<div class="vote-arrows pull-left">
<div>
<%= link_to " ",
post_up_vote_path(answer),
class: "glyphicon glyphicon-chevron-up #{(current_user.voted(answer) && current_user.voted(answer).up_vote?) ? 'voted' : '' }", method: :post %>
</div>
<div>
<strong><%= answer.points %></strong>
</div>
<div>
<%= link_to " ",
post_down_vote_path(answer),
class: "glyphicon glyphicon-chevron-down #{(current_user.voted(answer) && current_user.voted(answer).down_vote?) ? 'voted' : '' }" , method: :post%>
</div>
</div>
<% end %>
votes_controller.rb:
class VotesController < ApplicationController
before_action :load_answer_and_vote
def up_vote
if @vote
@vote.update_attribute(:value, 1)
else
@vote = current_user.votes.create(value: 1, answer: @answer)
end
redirect_to :back
end
def down_vote
if @vote
@vote.update_attribute(:value, -1)
else
@vote = current_user.votes.create(value: -1, answer: @answer)
end
redirect_to :back
end
private
def load_answer_and_vote
@question = Question.find(params[:question_id])
@vote = @question.votes.where(user_id: current_user.id).first
end
def update_vote(new_value)
if @vote
authorize @vote, :update?
@vote.update_attribute(:value, new_value)
else
@vote = current_user.votes.build(value: new_value, answer: @answer)
authorize @vote, :create?
@vote.save
end
end
end
vote.rb model:
class Vote < ActiveRecord::Base
belongs_to :user
belongs_to :answer, dependent: :destroy
default_scope { order('created_at DESC') }
validates :user, presence: true
validates :answer, presence: true
validates :value, inclusion: { in: [-1, 1], message: "%{value} is not a valid vote." }
after_save :update_answer
def up_vote?
value == 1
end
def down_vote?
value == -1
end
private
def update_post
answer.update_rank
end
end
routes.rb
Languagecheck::Application.routes.draw do
devise_for :users
resources :users
resources :languages do
resources :questions, except: [:index] do
resources :answers
post '/up-vote' => 'votes#up_vote', as: :up_vote
post '/down-vote' => 'votes#down_vote', as: :down_vote
end
end
resources :questions, only: [:index, :new, :create]
get 'about' => 'welcome#about'
root to: 'welcome#index'
end